您需要先安装一个扩展,例如 篡改猴、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();
- }
- });
- })();