您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
You can set the start timet to syncronize the media.
// ==UserScript== // @name Sync media // @description You can set the start timet to syncronize the media. // @namespace utubo/syncmedia // @match https://www.youtube.com/* // @match https://abema.tv/* // @version 1.0 // @author - // @name:ja Sync media // @description:ja You can set the start timet to syncronize the media. // ==/UserScript== (function() { // ---------- // sync const INTERVAL = 5000; const RANGE = 1; let timer = null; let startDateTime = null; const syncVideo = () => { if (!startDateTime) return; clearTimeout(timer); timer = setTimeout(syncVideo, INTERVAL); let target = null; if (location.host === 'abema.tv') { target = document.querySelector('video[preload=metadata]'); } else { target = document.querySelector('video'); } if (!target) return; const syncTime = (Date.now() - startDateTime) / 1000; if (Math.abs(target.currentTime - syncTime) > RANGE) { target.currentTime = syncTime; } }; // ---------- // ui const msecToStr = msec => { const tzoffset = (new Date()).getTimezoneOffset() * 60000; return new Date(msec - tzoffset) .toISOString() .replace('T', ' ') .replace(/\.\d\d\dZ$/, ''); }; const showDlg = () => { const val = prompt('⏱Set the start time', msecToStr(startDateTime || Date.now())); if (val === null) return; startDateTime = new Date(val).getTime(); syncVideo(); }; addEventListener('keydown', e => { if (e.altKey && e.key === 's') { showDlg(); } }); })();