您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Prevents the browser from throttling a tab by playing very quiet audio.
当前为
// ==UserScript== // @name Tab De-Throttler // @version 0.1.0 // @description Prevents the browser from throttling a tab by playing very quiet audio. // @author parseHex // @namespace https://greasyfork.org/users/8394 // @include http*://worker.mturk.com/?filters[search_term]=pandacrazy=on* // @include http*://worker.mturk.com/requesters/PandaCrazy/projects* // @include http*://worker.mturk.com/?end_signin=1&filters%5Bsearch_term%5D=pandacrazy%3Don* // @grant unsafeWindow // @run-at document-end // ==/UserScript== var audioFixStarted = false; // set up and play a quiet low-frequency sound // browsers won't throttle tabs playing audio var audioCtx = new (window.AudioContext || window.webkitAudioContext)(); function setupFixSound() { if (!audioCtx) { // last try wasn't successful, make a new audioCtx audioCtx = new (window.AudioContext || window.webkitAudioContext)(); } // don't need to run this more than once if (audioFixStarted) return; audioFixStarted = true; // this comes from the examples on https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Using_Web_Audio_API var oscillator = audioCtx.createOscillator(); var gainNode = audioCtx.createGain(); oscillator.connect(gainNode); gainNode.connect(audioCtx.destination); // could try other types besides sine wave // triangle sounds okay oscillator.type = 'sine'; // this seems to be about the lowest volume before the browser ignores the sound // tested it by lowering and checking if the sound icon showed up on the tab gainNode.gain.setTargetAtTime(0.0004, audioCtx.currentTime, 0); // picked a low frequency to make it less noticeable // too low and i noticed some audio 'crackling' // with 100 there's a slight crackle when the sound starts but that's it oscillator.frequency.setTargetAtTime(100, audioCtx.currentTime + 0.5, 0.5); oscillator.start(); removeListeners(); } setTimeout(() => { if (audioCtx.state === 'running') { setupFixSound(); } else { // have to wait for a user gesture to play sound audioCtx.close(); audioCtx = null; } }, 500); // audioCtx is suspended; wait for an input event and try again if (!audioFixStarted) { // starting in a later version of chrome, audio can't be played until the user interacts with the page // listen for a click or keypress and setup the sound then window.addEventListener('click', setupFixSound); window.addEventListener('keypress', setupFixSound); } function removeListeners() { window.removeEventListener('click', setupFixSound); window.removeEventListener('keypress', setupFixSound); } // setTimeout(function () { // // if there hasn't been an input event yet, try setting up sound just in case // try { // setupFixSound(); // // remove the listeners if it setup // removeListeners(); // } catch (e) { // console.log('Couldn\'t setup de-throttler sound.'); // console.error(e); // } // }, 15000);