如何在谷歌环境为网站加密码锁及YouTube锁定JS脚本失效求助
故障根因
- 语法逻辑错误:
location.replace()本身是直接触发页面跳转的方法,无返回值,将它的执行结果赋值给元素innerHTML的写法完全多余,且会引发报错 - DOM节点不存在:YouTube 新版页面早已废弃
watch7-content这个ID的节点,document.getElementById('watch7-content')会返回null,调用null的innerHTML属性会直接抛出JS异常,导致后续代码(包括console.log)全部终止执行 - 跳转地址不完整:未带协议头的
google.com会被浏览器识别为YouTube站内相对路径,无法正常跳转到谷歌首页 - 执行时机问题:如果脚本在页面DOM未完全渲染时就触发,即使节点存在也会拿不到元素,触发报错
修复方案
跳转不需要依赖任何页面节点,直接移除多余的DOM操作逻辑即可,简化后脚本如下:
const pass = prompt("YouTube is locked. Password to unlock"); if (pass !== "password") { console.log('wrong'); location.replace("https://google.com"); }
如果需要确保只有在YouTube视频播放页才触发校验,可以加路径判断条件:
// 仅在/watch路径的播放页触发逻辑 if (location.pathname.startsWith('/watch')) { const pass = prompt("YouTube is locked. Password to unlock"); if (pass !== "password") { console.log('wrong'); location.replace("https://google.com"); } }
额外优化建议
- 如果是用油猴类脚本管理器运行,可在脚本头添加
// @run-at document-start配置,让脚本在页面加载初期就触发,避免用户提前看到页面内容 - 密码明文写在脚本里容易被绕过,可考虑将密码做哈希校验,提升破解成本
内容的提问来源于stack exchange,提问作者TheNeto06
相关产品推荐
相关产品推荐

