您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Set adjustable playback speed on selected websites
- // ==UserScript==
- // @name TimeHookerLite
- // @namespace https://cozian.timehooker.com
- // @version 1.4
- // @description Set adjustable playback speed on selected websites
- // @author cozian
- // @license MIT
- // @include *
- // @run-at document-start
- // @grant GM_registerMenuCommand
- // @grant GM_getValue
- // @grant GM_setValue
- // ==/UserScript==
- (function() {
- 'use strict';
- // Retrieve include list and playback speed, or initialize defaults
- let includeList = GM_getValue("includeList", []);
- let playbackSpeed = GM_getValue("playbackSpeed", 10); // Default speed of 10x
- // Function to add the current site to the include list
- function addToIncludeList() {
- const currentSite = window.location.hostname;
- if (!includeList.includes(currentSite)) {
- includeList.push(currentSite);
- GM_setValue("includeList", includeList);
- alert(`Added ${currentSite} to include list.`);
- } else {
- alert(`${currentSite} is already in the include list.`);
- }
- }
- // Function to set a new playback speed
- function setPlaybackSpeed() {
- const newSpeed = prompt("Enter the new playback speed (e.g., 10 for 10x):", playbackSpeed);
- if (newSpeed && !isNaN(newSpeed)) {
- playbackSpeed = parseFloat(newSpeed);
- GM_setValue("playbackSpeed", playbackSpeed);
- alert(`Playback speed set to ${playbackSpeed}x.`);
- } else {
- alert("Invalid speed value. Please enter a numeric value.");
- }
- }
- // Register menu commands for adding sites and setting playback speed
- GM_registerMenuCommand("Add this site to TimeHookerLite Include List", addToIncludeList);
- GM_registerMenuCommand("Set TimeHookerLite Playback Speed", setPlaybackSpeed);
- // Check if the current site is in the include list before running the script
- if (!includeList.includes(window.location.hostname)) {
- return;
- }
- // Override setInterval to accelerate intervals based on the playback speed
- const originalSetInterval = window.setInterval;
- window.setInterval = function(callback, delay, ...args) {
- return originalSetInterval(callback, delay / playbackSpeed, ...args);
- };
- // Override setTimeout to accelerate timeouts based on the playback speed
- const originalSetTimeout = window.setTimeout;
- window.setTimeout = function(callback, delay, ...args) {
- return originalSetTimeout(callback, delay / playbackSpeed, ...args);
- };
- // Override Date.now to simulate accelerated time
- const originalDateNow = Date.now;
- Date.now = function() {
- return originalDateNow() * playbackSpeed;
- };
- // Override performance.now to simulate accelerated time
- const originalPerformanceNow = performance.now.bind(performance);
- performance.now = function() {
- return originalPerformanceNow() * playbackSpeed;
- };
- })();