您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
当出现"影片已暂停,要继续观赏吗?"时忽略它继续播放
当前为
// ==UserScript== // @name youtube continue play // @name:en youtube continue play // @name:zh-CN youtube继续播放 // @name:zh-TW youtube繼續播放 // @name:ja youtube履歴書再生 // @description When "Video paused, do you want to continue watching?" Appears, ignore it and continue playing automatically // @description:en When "Video paused, do you want to continue watching?" Appears, ignore it and continue playing automatically // @description:zh-TW 當出現"影片已暫停,要繼續觀賞嗎?"時忽略它繼續播放 // @description:zh-CN 当出现"影片已暂停,要继续观赏吗?"时忽略它继续播放 // @description:ja 「ビデオが一時停止しましたが、引き続き視聴しますか?」が表示されたら無視して再生を続けます // @namespace https://greasyfork.org/zh-TW/users/461233-jack850628 // @version 1.16 // @author jack850628 // @include /^https?:\/\/(:?.*?\.)*youtube.com\/.*$/ // @noframes // @run-at document-end // @license MIT // ==/UserScript== (function() { let pausedF = function({target: videoPlay}){ setTimeout(function(){ let ytConfirmDialog = document.querySelector('yt-confirm-dialog-renderer'); if( ytConfirmDialog && ( ytConfirmDialog.parentElement.style.display != 'none' || ( document.hidden && videoPlay.getCurrentTime() < videoPlay.getDuration() ) ) ){ videoPlay.play(); } }, 500); } function listenerVideoPlayer(){ let videoPlay = document.querySelector('video'); if(!videoPlay){ return false; } videoPlay.addEventListener('pause', pausedF); return true; } let scriptBlocks = document.getElementsByTagName('script')[0]; let ycpScript = document.createElement('script'); ycpScript.setAttribute('id','ycp-script'); ycpScript.setAttribute('ycp-data','wait'); ycpScript.innerHTML = ` window.spf._request = window.spf.request; Object.defineProperty(window.spf, 'request', { value: function(){ if(arguments[1]){ if(arguments[1].onDone){ let onDone = arguments[1].onDone; arguments[1].onDone = function(){ let result = onDone.apply(this,arguments); document.querySelector('#ycp-script').setAttribute('ycp-data','ok'); return result; } }else{ arguments[1].onDone = () => document.querySelector('#ycp-script').setAttribute('ycp-data','ok'); } } return window.spf._request.apply(this,arguments); }, writable: true, configurable: true }); document.querySelector('#ycp-script').setAttribute('ycp-data','ok'); `; let ycpScriptObserver = new MutationObserver(([{target: ycpScript}], observer) => { if(ycpScript.getAttribute('ycp-data') == 'ok'){ if(!listenerVideoPlayer()) ycpScript.setAttribute('ycp-data','wait') else ycpScriptObserver.disconnect(); } }); if(scriptBlocks){ ycpScriptObserver.observe( ycpScript, { attributes: true } ); scriptBlocks.parentNode.insertBefore(ycpScript,scriptBlocks); } })();