阻止切屏检测

切屏也能保持网页标题不变,让你轻松找到想要的网页!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         阻止切屏检测
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  切屏也能保持网页标题不变,让你轻松找到想要的网页!
// @author       GR:PM
// @license      MIT
// @match        *://*/*
// @grant        none
// ==/UserScript==

;(function () {
    "use strict"
    Object.defineProperty(window, "onblur", {
        value: null,
        writable: false,
    })
    Object.defineProperty(document, "onblur", {
        value: null,
        writable: false,
    })
    Object.defineProperty(window, "onmouseleave", {
        value: null,
        writable: false,
    })
    Object.defineProperty(document, "onmouseleave", {
        value: null,
        writable: false,
    })
    Object.defineProperty(window, "onvisibilitychange", {
        value: null,
        writable: false,
    })
    Object.defineProperty(document, "onvisibilitychange", {
        value: null,
        writable: false,
    })

    // Backup original addEventListener
    const originalEventTargetAddEventListener = EventTarget.prototype.addEventListener
    const originalHTMLElementAddEventListener = HTMLElement.prototype.addEventListener
    const originalWindowAddEventListener = Window.prototype.addEventListener
    const originalDocumentAddEventListener = Document.prototype.addEventListener

    function isBlocked(eventName) {
        if (
            eventName === "visibilitychange" ||
            eventName === "focus" ||
            eventName === "focusin" ||
            eventName === "focusout" ||
            eventName === "blur" ||
            eventName === "mouseleave"
        ) {
            return true
        } else {
            return false
        }
    }

    EventTarget.prototype.addEventListener = function (eventName, eventHandler) {
        if (isBlocked(eventName)) {
            console.log(`Blocked listener: ${eventName}`)
        } else {
            // console.log(`Bypass listener: ${eventName}`);
            originalEventTargetAddEventListener.call(this, eventName, eventHandler)
        }
    }

    HTMLElement.prototype.addEventListener = function (eventName, eventHandler) {
        if (isBlocked(eventName)) {
            console.log(`Blocked listener: ${eventName}`)
        } else {
            // console.log(`Bypass listener: ${eventName}`);
            originalHTMLElementAddEventListener.call(this, eventName, eventHandler)
        }
    }

    Window.prototype.addEventListener = function (eventName, eventHandler) {
        if (isBlocked(eventName)) {
            console.log(`Blocked listener: ${eventName}`)
        } else {
            // console.log(`Bypass listener: ${eventName}`);
            originalWindowAddEventListener.call(this, eventName, eventHandler)
        }
    }

    Document.prototype.addEventListener = function (eventName, eventHandler) {
        if (isBlocked(eventName)) {
            console.log(`Blocked listener: ${eventName}`)
        } else {
            // console.log(`Bypass listener: ${eventName}`);
            originalDocumentAddEventListener.call(this, eventName, eventHandler)
        }
    }
})()