允许自定义视频播放速度
// ==UserScript== // @name 自定义视频播放速度 // @version 2.2 // @description 允许自定义视频播放速度 // @author ChatGPT // @match http://*/* // @match https://*/* // @grant GM_setValue // @grant GM_getValue // @run-at document-end // @namespace https://greasyfork.org/users/452911 // ==/UserScript== function setVideoSpeed() { 'use strict'; let videos = document.querySelectorAll('video,[class*="player"] *'); if (videos.length > 0 && !document.fullscreenElement) { (function() { 'use strict'; let defaultSpeed = 1; let currentSpeed = defaultSpeed; let savedSpeed = GM_getValue('videoSpeed'); if (savedSpeed) { defaultSpeed = parseFloat(savedSpeed); currentSpeed = defaultSpeed; } let videos = document.querySelectorAll('video,[class*="player"] *'); for (let i = 0; i < videos.length; i++) { videos[i].playbackRate = currentSpeed; } let control = document.createElement('div'); control.textContent = '倍速控制'; control.style.cssText = ` position: fixed; right: 5px; top: 30px; padding: 2px; background: #ddd; border: 1px solid #999; cursor: pointer; z-index: 9999; `; document.body.appendChild(control); control.addEventListener('click', () => { let newSpeed = prompt('请输入新的播放倍速:', currentSpeed); if (newSpeed) { saveSpeed(newSpeed); updateSpeed(newSpeed); } }); function updateSpeed(newSpeed) { for (let i = 0; i < videos.length; i++) { videos[i].playbackRate = newSpeed; } currentSpeed = newSpeed; } function saveSpeed(newSpeed) { GM_setValue('videoSpeed', newSpeed); } window.addEventListener('speedChanged', (e) => { let newSpeed = e.data; updateSpeed(newSpeed); }); let iframes = document.querySelectorAll('iframe'); iframes.forEach(applySpeed); function applySpeed(iframe) { let doc = iframe.contentDocument; let videos = doc.querySelectorAll('video,[class*="player"] *'); videos.forEach(v => v.playbackRate = currentSpeed); let iframes = doc.querySelectorAll('iframe'); iframes.forEach(applySpeed); } })(); } } let throttleTimer; const throttle = () => { if(throttleTimer) return; throttleTimer = setTimeout(() => { setVideoSpeed(); throttleTimer = null; }, 800); } window.addEventListener('scroll', throttle); setVideoSpeed();