Always has focus

Tricks the page into thinking it is always focused

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name        Always has focus
// @namespace   dev.tock.keepfocus
// @version     1.0
// @description Tricks the page into thinking it is always focused
// @author      Steve Persson
// @match       *://*/*
// @run-at      document-start
// @grant       unsafeWindow
// @license     MIT
// ==/UserScript==

(function() {
    'use strict';

    // Override the document.hasFocus() method to always return true
    document.hasFocus = function () {
        return true;
    };
    
    // Override the document.hidden property and visibilityState
    Object.defineProperty(Document.prototype, "hidden", { get: () => false });
    Object.defineProperty(Document.prototype, "visibilityState", { get: () => "visible" });

    // Override the Page Visibility API properties
    Object.defineProperty(document, "visibilityState", {
        get: function () {
            return "visible";
        }
    });

    Object.defineProperty(document, "hidden", {
        get: function () {
            return false;
        }
    });

    // Stop propagation of visibilitychange and blur events
    window.addEventListener('visibilitychange', function (event) {
        event.stopImmediatePropagation();
    }, true);

    window.addEventListener('blur', function (event) {
        event.stopImmediatePropagation();
    }, true);

    // Some sites might use window.onfocus/onblur
    window.onblur = null;
    window.onfocus = null;
    
    // Override the window.onblur event handler
    if (unsafeWindow) {
        unsafeWindow.onblur = null;
    }

})();