TamperMonkey脚本仅加载YouTube首页时不运行问题求解
问题原因
该现象由两个特性叠加导致,并非Tampermonkey bug:
- YouTube为单页应用,全站采用客户端侧导航,页面不会触发完整重载,仅在首次打开标签页时触发一次脚本注入
- Chrome对YouTube开启了预渲染(Prerender2)优化,地址栏输入YouTube地址时浏览器会提前在后台渲染页面,脚本会在预渲染的隐藏页面中执行,Tampermonkey会将预渲染页面的运行状态标记为无效,页面正式激活时脚本不会重新执行,就出现了短暂显示运行然后消失的现象
解决方案
方案1:修改脚本适配场景
调整脚本逻辑,兼容预渲染和YouTube页面切换规则,无需修改匹配规则,示例框架如下:
脚本头部配置:
// ==UserScript== // @name 移除YouTube电视播放按钮 // @match https://www.youtube.com/* // @run-at document-idle // ==/UserScript==
脚本逻辑部分:
// 原有移除按钮逻辑 function removeCastButton() { const castBtn = document.querySelector('.ytp-cast-button'); if (castBtn) castBtn.remove(); } // 适配预渲染场景 if (document.prerendering) { document.addEventListener('prerenderingchange', () => { removeCastButton(); // 监听YouTube原生导航事件,页面切换后自动重新执行 document.addEventListener('yt-navigate-finish', removeCastButton); }); } else { removeCastButton(); document.addEventListener('yt-navigate-finish', removeCastButton); } // 兜底:监听DOM变化,处理动态渲染的按钮 const observer = new MutationObserver(removeCastButton); observer.observe(document.body, { childList: true, subtree: true });
方案2:调整Tampermonkey全局配置
无需修改脚本,打开Tampermonkey设置页面,拉到最底部「实验性」板块,关闭「注入到预渲染页面」开关,即可解决预渲染导致的脚本不执行问题。单页应用页面切换的问题仍需给脚本添加yt-navigate-finish事件监听。
内容的提问来源于stack exchange,提问作者nnnnnn_nnnnnnn
相关产品推荐
相关产品推荐

