// ==UserScript== // @name 视频倍速修改 // @version 1.02 // @description 自定义页面所有视频播放速度,默认1.5倍 // @author Lama AI 辅助 // @match http://*/* // @match https://*/* // @grant GM_setValue // @grant GM_getValue // @run-at document-end // @namespace https://greasyfork.org/users/1171320 // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; let defaultSpeed = 1.5; let currentSpeed = defaultSpeed; let savedSpeed = GM_getValue('videoSpeed'); if (savedSpeed) { defaultSpeed = parseFloat(savedSpeed); currentSpeed = defaultSpeed; } function updateSpeed(newSpeed) { let videos = document.querySelectorAll('video'); // Simpler selector for now videos.forEach(video => { try { video.playbackRate = parseFloat(newSpeed); } catch (error) { console.error("Error setting playbackRate:", error, video); } }); currentSpeed = newSpeed; } function saveSpeed(newSpeed) { GM_setValue('videoSpeed', newSpeed); } function applySpeedToAllVideos() { updateSpeed(currentSpeed); let iframes = document.querySelectorAll('iframe'); iframes.forEach(iframe => { try { const iframeDoc = iframe.contentDocument || iframe.contentWindow.document; const iframeVideos = iframeDoc.querySelectorAll('video'); iframeVideos.forEach(video => { try { video.playbackRate = currentSpeed; } catch (error) { console.error("Error setting playbackRate in iframe:", error, video); } }); } catch (error) { console.error("Error accessing iframe content:", error, iframe); } }); } // Add an observer to catch videos loaded later const observer = new MutationObserver(applySpeedToAllVideos); observer.observe(document.body, { childList: true, subtree: true }); //Initial application applySpeedToAllVideos(); // UI control 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); } }); })();