Anti Focus Detection

Prevent focus/visibility detection

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Anti Focus Detection
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Prevent focus/visibility detection
// @match        *://*/*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    Object.defineProperty(document, 'hidden', {
        get: () => false
    });

    Object.defineProperty(document, 'visibilityState', {
        get: () => 'visible'
    });

    const eventsToBlock = ['visibilitychange', 'blur', 'focus', 'focusin', 'focusout'];

    eventsToBlock.forEach(eventType => {
        window.addEventListener(eventType, e => e.stopImmediatePropagation(), true);
    });

    const originalAddEventListener = EventTarget.prototype.addEventListener;

    EventTarget.prototype.addEventListener = function(eventType, listener, options) {
        if (eventsToBlock.includes(eventType)) {
            return;
        }
        originalAddEventListener.call(this, eventType, listener, options);
    };

})();