您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Helps in your goals to limit the use of youtube videos!
// ==UserScript== // @name The YouTube Limiter // @namespace http://tampermonkey.net/ // @version 0.1 // @description Helps in your goals to limit the use of youtube videos! // @author theKidOfArcrania // @include http*://www.youtube.com* // @grant GM_getValue // @grant GM_setValue // ==/UserScript== /* jshint -W097 */ 'use strict'; var energy = 0; //energy in seconds. max is 600 (10 minutes) var timerPopup = document.createElement("P"); var error = document.createElement("P"); var timer = document.createElement("SPAN"); var updater; var lastUpdate; var armed = false; var timerText = document.createTextNode("Time left: "); timerPopup.style = "z-index: 2000000000; background: yellow; font-family: arial; position: fixed; font-size: 20px;"; timer.style = "font-weight: bold"; timerPopup.appendChild(timerText); timerPopup.appendChild(timer); error.style = "z-index=2000000000; background=yellow; font-family: arial; position: fixed; font-size: 20px; color: red"; error.innerHTML = "We're sorry. But you have used up all your time. Please refresh this page later to see how much energy you recharged..."; document.body.insertBefore(timerPopup, document.body.childNodes[0]); lastUpdate = new Date(); //Arming/ disarming of youtube arm(); document.addEventListener("visibilitychange", function() { if (document.hidden) { unArm(); }else { arm(); } }); document.addEventListener("unload", unArm, true); //Arms a youtube page with a timer function arm() { if (armed) return; armed = true; var now = new Date().getTime(); var last = GM_getValue("INACTIVE", now); var elapsed = now - last; //Recharge energy with exchange rate of 1 minute of no activity //yielding 1 second of watching time. energy = GM_getValue("ENERGY", 4) + elapsed / (1000 * 60); energy = Math.min(energy, 600); lastUpdate = new Date(); updater = setInterval(updateEnergy, 4); } //Unarms the limiter, recharge energy for next use. //Called whenver the window is minimized or unfocused function unArm() { if (!armed) return; armed = false; GM_setValue("INACTIVE", new Date().getTime()); GM_setValue("ENERGY", energy); clearInterval(updater); } //Checks the amount of time left function updateEnergy() { var before = lastUpdate; lastUpdate = new Date(); var after = lastUpdate; energy -= (after - before) / 1000; energy = Math.max(energy, 0); if (energy > 60) { timer.style.color = "green"; }else if (energy > 20){ timer.style.color = "goldenrod"; }else { timer.style.color = "red"; } GM_setValue("INACTIVE", new Date().getTime()); GM_setValue("ENERGY", energy); if (energy <= 0) { unArm(); document.body.innerHTML = ""; document.body.appendChild(error); }else { var secs = Math.floor(energy) % 60; var mins = Math.floor(energy / 60) % 60; var hrs = Math.floor(energy / 3600) % 24; timer.innerHTML = padTime(hrs) + ":" + padTime(mins) + ":" + padTime(secs); } } function padTime(t) { var a = Math.abs(t); if (a < 10) return (t < 0 ? "-0" : "0") + a; else return (t < 0 ? "-" : "") + a; }