您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Make website completely invisible to the user switching to another window or tab. Warning: may break some websites.
当前为
// ==UserScript== // @name Sabotage Window/Tab Switch Visibility // @description Make website completely invisible to the user switching to another window or tab. Warning: may break some websites. // @author owowed // @version 0.0.1 // @namespace util.owowed.moe // @license GPL-3.0-or-later // @match *://*/* // @grant unsafeWindow // @run-at document-start // @copyright All rights reserved. Licensed under GPL-3.0-or-later. View license at https://spdx.org/licenses/GPL-3.0-or-later.html // ==/UserScript== !function () { /* Disable focus and blur event of document and window */ const windowProto = globalThis.unsafeWindow ?? window; console.log("Sabotage Window/Tab Switch Visibility is executing..."); function disableFocusBlurEvent(objPrototype) { Object.defineProperty(objPrototype, "onfocus", { set: () => undefined, enumerable: true, configurable: true }); Object.defineProperty(objPrototype, "onblur", { set: () => undefined, enumerable: true, configurable: true }); const oldEventListener = objPrototype.addEventListener; objPrototype.addEventListener = function (event, ...args) { if (event == "blur" || event == "focus") return; oldEventListener.call(this, event, ...args); } } disableFocusBlurEvent(Document.prototype); disableFocusBlurEvent(windowProto); /* Disable Page Visibility API */ Object.defineProperty(Document.prototype, "hidden", { get: () => false, enumerable: true, configurable: true }); Object.defineProperty(Document.prototype, "visibilityState", { get: () => false, enumerable: true, configurable: true }); document.addEventListener("visibilitychange", function(e) { e.stopImmediatePropagation(); }, true, true); /* Partially disable blur and focus event of element */ const safeBoxSize = 800; const elementOldEventListener = Element.prototype.addEventListener; Element.prototype.addEventListener = function (event, ...args) { if (event == "blur" || event == "focus") { const elem = this; elementOldEventListener.call(this, event, () => { const clientRect = elem.getBoundingClientRect(); if (clientRect.width >= safeBoxSize || clientRect.height >= safeBoxSize) { return; } }); } elementOldEventListener.call(this, event, ...args); }; /* Disable CSS prefers-reduced-motion for JavaScript */ const windowOldMatchMedia = windowProto.matchMedia; windowProto.matchMedia = function (matchMedia, ...args) { if (matchMedia.includes("prefers-reduced-motion") && matchMedia.includes("reduce")) { return false; } return windowOldMatchMedia.call(this, matchMedia, ...args); } console.log("Sabotage Window/Tab Switch Visibility executed"); }();