您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Makes tabs and windows think they're visible even when they're not.
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/456228/1309113/Absolute%20Visibility.js
- // ==UserScript==
- // @name Absolute Visibility
- // @namespace https://naeembolchhi.github.io/
- // @version 0.2
- // @description Makes tabs and windows think they're visible even when they're not.
- // @author NaeemBolchhi
- // @license Mozilla Public License 2.0
- // @grant none
- // ==/UserScript==
- const knife = `const script = document.currentScript;
- const isFirefox = /Firefox/.test(navigator.userAgent) || typeof InstallTrigger !== 'undefined';
- const block = e => {
- e.preventDefault();
- e.stopPropagation();
- e.stopImmediatePropagation();
- };
- const once = {
- focus: true,
- visibilitychange: true,
- webkitvisibilitychange: true
- };
- /* visibility */
- Object.defineProperty(document, 'visibilityState', {
- get() {
- return 'visible';
- }
- });
- if (isFirefox === false) {
- Object.defineProperty(document, 'webkitVisibilityState', {
- get() {
- return 'visible';
- }
- });
- }
- document.addEventListener('visibilitychange', e => {
- script.dispatchEvent(new Event('state'));
- if (script.dataset.visibility !== 'false') {
- if (once.visibilitychange) {
- once.visibilitychange = false;
- return;
- }
- return block(e);
- }
- }, true);
- document.addEventListener('webkitvisibilitychange', e => {
- if (script.dataset.visibility !== 'false') {
- if (once.webkitvisibilitychange) {
- once.webkitvisibilitychange = false;
- return;
- }
- return block(e);
- }
- }, true);
- window.addEventListener('pagehide', e => script.dataset.visibility !== 'false' && block(e), true);
- /* hidden */
- Object.defineProperty(document, 'hidden', {
- get() {
- return false;
- }
- });
- Object.defineProperty(document, isFirefox ? 'mozHidden' : 'webkitHidden', {
- get() {
- return false;
- }
- });
- /* focus */
- Document.prototype.hasFocus = new Proxy(Document.prototype.hasFocus, {
- apply(target, self, args) {
- if (script.dataset.focus !== 'false') {
- return true;
- }
- return Reflect.apply(target, self, args);
- }
- });
- const onfocus = e => {
- if (script.dataset.focus !== 'false') {
- if (e.target === document || e.target === window) {
- if (once.focus && document.readyState === 'complete' && e.target === window) {
- once.focus = false;
- return;
- }
- return block(e);
- }
- }
- };
- // document.addEventListener('focus', onfocus, true);
- window.addEventListener('focus', onfocus, true);
- /* blur */
- const onblur = e => {
- if (script.dataset.blur !== 'false') {
- if (e.target === document || e.target === window) {
- return block(e);
- }
- }
- };
- document.addEventListener('blur', onblur, true);
- window.addEventListener('blur', onblur, true);
- /* mouse */
- window.addEventListener('mouseleave', e => {
- if (script.dataset.mouseleave !== 'false') {
- if (e.target === document || e.target === window) {
- return block(e);
- }
- }
- }, true);
- /* requestAnimationFrame */
- let lastTime = 0;
- window.requestAnimationFrame = new Proxy(window.requestAnimationFrame, {
- apply(target, self, args) {
- if (script.dataset.hidden === 'true') {
- const currTime = Date.now();
- const timeToCall = Math.max(0, 16 - (currTime - lastTime));
- const id = window.setTimeout(function() {
- args[0](performance.now());
- }, timeToCall);
- lastTime = currTime + timeToCall;
- return id;
- } else {
- return Reflect.apply(target, self, args);
- }
- }
- });
- window.cancelAnimationFrame = new Proxy(window.cancelAnimationFrame, {
- apply(target, self, args) {
- if (script.dataset.hidden === 'true') {
- clearTimeout(args[0]);
- }
- return Reflect.apply(target, self, args);
- }
- });`;
- (function eyeStabber() {
- let html, script;
- html = document.documentElement;
- if (!html) {window.location.reload();}
- script = document.createElement("script");
- script.setAttribute("type", "text/javascript");
- script.innerHTML = knife;
- html.appendChild(script);
- script.remove();
- })();