Chrome扩展:如何在页面内嵌脚本前运行内容脚本修改YouTube播放器
这问题我之前帮人排查过好几次,YouTube的播放器脚本加载时机确实刁钻得很——哪怕你把扩展脚本的run_at设成document-start,有时候还是抢不过它的执行优先级。给你两个经过验证的靠谱思路:
解决方案1:用webRequest API拦截并替换外部player_api脚本
如果player_api是从YouTube服务器加载的外部脚本(比如https://www.youtube.com/yts/jsbin/player_xxxx.js这类),直接拦截请求、返回你修改后的版本是最稳妥的:
- 第一步:在
manifest.json里添加必要权限:"permissions": ["webRequest", "webRequestBlocking", "*://*.youtube.com/*"] - 第二步:在后台脚本(比如
background.js)里写拦截逻辑:chrome.webRequest.onBeforeRequest.addListener( function(details) { // 匹配player相关的脚本URL,根据实际情况调整正则规则 if (/player_api|player.*\.js/i.test(details.url)) { // 重定向到你修改好的本地脚本文件 return { redirectUrl: chrome.runtime.getURL('modified_player.js') }; } }, { urls: ["*://*.youtube.com/*"], types: ["script"] }, ["blocking"] ); - 第三步:把修改后的脚本放在扩展目录里,同时在
manifest.json里声明它允许YouTube页面访问:"web_accessible_resources": [ { "resources": ["modified_player.js"], "matches": ["*://*.youtube.com/*"] } ]
解决方案2:拦截内嵌脚本的执行(针对页面内嵌入的
相关产品推荐
相关产品推荐

