Bypass Fullscreen e Focus

Inganna il controllo dello schermo intero e del focus

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

Advertisement:

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

Advertisement:

// ==UserScript==
// @name         Bypass Fullscreen e Focus
// @namespace    http://tampermonkey.net/
// @version      2.1
// @description  Inganna il controllo dello schermo intero e del focus
// @match        *://*/*
// @run-at       document-start
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // --- 1. BYPASS VISIBILITA' E FOCUS ---
    Object.defineProperty(document, 'visibilityState', { get: () => 'visible' });
    Object.defineProperty(document, 'hidden', { get: () => false });

    const blockFocusEvents = (e) => {
        e.stopImmediatePropagation();
        e.preventDefault();
    };

    window.addEventListener('visibilitychange', blockFocusEvents, true);
    document.addEventListener('visibilitychange', blockFocusEvents, true);
    window.addEventListener('blur', blockFocusEvents, true);
    document.addEventListener('blur', blockFocusEvents, true);


    // --- 2. BYPASS SCHERMO INTERO ---
    // Creiamo un finto elemento da restituire quando il sito chiede se siamo in Fullscreen
    const mockFullscreenElement = document.documentElement;

    const fullscreenProps = [
        'fullscreenElement',
        'webkitFullscreenElement',
        'mozFullScreenElement',
        'msFullscreenElement'
    ];

    // Sovrascriviamo le proprietà in modo che non restituiscano mai "null"
    fullscreenProps.forEach(prop => {
        Object.defineProperty(document, prop, {
            get: () => mockFullscreenElement,
            configurable: true
        });
    });

    // Blocchiamo gli eventi di cambio schermo intero
    const blockFullscreenEvents = (e) => {
        e.stopImmediatePropagation();
        // Nota: non usiamo preventDefault() qui perché l'azione di base (uscire) è forzata dal browser
    };

    const fullscreenEvents = [
        'fullscreenchange',
        'webkitfullscreenchange',
        'mozfullscreenchange',
        'MSFullscreenChange'
    ];

    fullscreenEvents.forEach(evt => {
        document.addEventListener(evt, blockFullscreenEvents, true);
        window.addEventListener(evt, blockFullscreenEvents, true);
    });

})();