// ==UserScript== // @name Video Playback Speed Manager // @namespace http://tampermonkey.net/ // @version 1.0.1 // @description 获取并管理video播放速度 // @author Turnip // @match https://www.bilibili.com/video/* // @icon https://www.google.com/s2/favicons?sz=64&domain=bilibili.com // @grant none // ==/UserScript== (function() { 'use strict'; // 创建或打开IndexedDB数据库 const dbName = 'VideoPlaybackDB'; const storeName = 'playbackSpeedStore'; let db; const request = indexedDB.open(dbName, 1); request.onerror = function(event) { console.error('IndexedDB error:', event.target.errorCode); }; request.onsuccess = function(event) { db = event.target.result; console.log('IndexedDB opened successfully'); }; request.onupgradeneeded = function(event) { db = event.target.result; db.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true }); }; // 获取video元素 const videoElement = document.querySelector('video'); if (!videoElement) { console.error('Video element not found'); return; } // 读取播放速度信息 async function getPlaybackSpeed() { return new Promise((resolve, reject) => { const transaction = db.transaction(storeName, 'readonly'); const store = transaction.objectStore(storeName); console.log("store",store) // 使用ID为11的记录来存储播放速度 const request = store.get(1); console.log("request",request) request.onerror = function(event) { reject(event.target.errorCode); }; request.onsuccess = function(event) { console.log("request target.result",event.target.result) resolve(event.target.result ? event.target.result.speed : null); }; }); } // 设置播放速度信息 function setPlaybackSpeed(speed) { const transaction = db.transaction(storeName, 'readwrite'); const store = transaction.objectStore(storeName); //使用ID为11的记录来存储播放速度 const request = store.put({ id: 1, speed: speed }); console.log("request",request) request.onerror = function(event) { console.error('Error setting playback speed:', event.target.errorCode); }; } // 监控播放速度变化 let currentSpeed = null; videoElement.addEventListener('loadedmetadata',async function() { currentSpeed = await getPlaybackSpeed(); console.log('Current playback speed:', currentSpeed); setPlaybackSpeed(currentSpeed); }); videoElement.addEventListener('ratechange', function() { currentSpeed = videoElement.playbackRate; console.log('Playback speed changed to:', currentSpeed); setPlaybackSpeed(currentSpeed); }); // 页面加载时恢复播放速度 window.addEventListener('load', async function() { try { const speed = await getPlaybackSpeed(); console.log('Restoring playback speed:', speed); if (speed !== null) { videoElement.playbackRate = speed; console.log('Restored playback speed:', speed); } else { // 如果没有找到播放速度信息,可以设置为默认值 videoElement.playbackRate = 1; console.log('Playback speed set to default:', 1); } } catch (error) { console.error('Error restoring playback speed:', error); } }); })();