您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows a big DONE sign when the page is fully loaded
当前为
// ==UserScript== // @name DONE - Visual Sign Of A Loaded Page // @namespace http://userscripts.org/users/23652 // @description Shows a big DONE sign when the page is fully loaded // @include http://*.*/* // @include https://*.*/* // @copyright JoeSimmons // @version 1.0.1 // @license GPL version 3 or any later version; http://www.gnu.org/copyleft/gpl.html // @grant GM_addStyle // ==/UserScript== +function () { 'use strict'; // temporary fade function until I implement one in JSL function fade(dir, element) { var interval = 0.05, fps = Math.floor(1000 / 60), count, intv; function anim() { var curOpacity = parseFloat(element.style.opacity); if (dir === 'in') { if (curOpacity >= 1) { count = 1; element.style.opacity = '1'; window.clearInterval(intv); } else { element.style.opacity = (count += interval); } } else if (dir === 'out') { if (curOpacity <= 0) { count = 0; element.style.opacity = '0'; element.style.display = 'none'; window.clearInterval(intv); } else { element.style.opacity = (count -= interval); } } } if (typeof element === 'string') { element = document.getElementById(element); } if (dir === 'in') { element.style.opacity = '0'; count = 0; if (element.style.display === 'none') { element.style.display = ''; } } else if (dir === 'out') { element.style.opacity = '1'; count = 1; } else { return; } intv = window.setInterval(anim, fps); } // runAfterPageIdle by JoeSimmons // supply it a function and it will run when the page stops mutating function runAfterPageIdle(fn) { 'use strict'; // can remove if parent is running in strict already; would save some bytes var time = Date.now(), set = window.setInterval.bind(window), clear = window.clearInterval.bind(window), idleTime = 500, // adjustable -- the time after which the page has been idle, the user's function will run intv; function listen(a) { var now = Date.now(); // why call Date.now() twice? :) if (typeof a === 'undefined' && (now - time) >= idleTime) { // clear if it's been idle for the set length of time done(); } else if (typeof a === 'object') { // reset if it hasn't been idle for the set length of time time = now; } } function done() { // clear the interval clear(intv); // remove listeners document.removeEventListener('DOMSubtreeModified', listen, false); document.removeEventListener('DOMNodeInserted', listen, false); document.removeEventListener('DOMNodeRemoved', listen, false); // run user at next event loop slot window.setTimeout(fn, 0); } if (typeof JSL !== 'undefined' && typeof JSL.setInterval === 'function' && typeof JSL.clearInterval === 'function') { set = JSL.setInterval.bind(JSL); clear = JSL.clearInterval.bind(JSL); } if (typeof fn === 'function') { intv = set(listen, 125); // check 8 times per second // set listeners document.addEventListener('DOMSubtreeModified', listen, false); document.addEventListener('DOMNodeInserted', listen, false); document.addEventListener('DOMNodeRemoved', listen, false); } } function main() { var box = document.createElement('div'), boxWidth = Math.floor(window.innerWidth * 0.95); GM_addStyle('' + '#load_sign { ' + 'background: #D7FFD7; ' + 'border: 3px ridge #008000; ' + 'color: #00C400; ' + 'display: block; ' + 'font-style: Arial; ' + 'font-size: 24pt; ' + 'height: 42px; ' + 'left: ' + (window.innerWidth / 2 - boxWidth / 2) + 'px; ' + // division comes first here so it works 'margin: 0 auto; ' + 'min-height: 42px; ' + 'padding: 4px 0; ' + 'position: fixed; ' + 'text-align: center; ' + 'text-shadow: 2px 2px 4px #C7C7C7; ' + 'top: 0; ' + 'width: ' + boxWidth + 'px; ' + 'z-index: 2100100100; ' + '}' + ''); box.id = 'load_sign'; box.appendChild( document.createTextNode('LOADED') ); document.body.appendChild(box); window.setTimeout(function () { fade('out', 'load_sign'); }, 750); } // make sure the page is not in a frame if (window.frameElement || window !== window.top) { return; } runAfterPageIdle(main); }();