【发布时间】:2018-07-25 11:34:45
【问题描述】:
我正在尝试通过更改嵌入到视频的 html 观看页面中的 player_api 脚本中的一些变量来更改 YouTube 播放器的某些行为。
问题是,无论我尝试什么,播放器的嵌入式脚本总是在我的扩展添加修改之前运行。从而保持玩家的行为相同。
我尝试将清单中的 run_at 属性设置为 document-start,但脚本根本没有运行。
我可以做些什么来停止该脚本的执行,直到我对其进行更改?
PS:我尝试通过拦截 html 调用并使用 Charles Proxy 编辑正文来更改脚本,然后播放器的行为按照我的意愿进行了更改。所以它知道如果在正确的时间完成它应该可以工作。
.
manifest.json
{
"manifest_version": 2,
"name": "YouFit For YouTube",
"version": "1",
"content_scripts": [{
"js": ["content.js"],
"matches": ["https://*.youtube.com/watch?*",
"https://*.youtube.com/watch?*"],
}],
"browser_action": {
"default_icon": "icon.png"
}
}
content.js
function changeBehavior() {
var scriptElements = document.getElementsByTagName('script');
for (var i = 14; i < scriptElements.length; i++) {
var curScriptBody = scriptElements[i].outerHTML;
// Find the script i'm interested in
if (curScriptBody.indexOf("var ytplayer") != -1) {
scriptElements[i].outerHTML = scriptElements[i].outerHTML.replace("<text>", "<replacement text>");
alert("Replaced");
break;
}
}
}
changeBehavior();
【问题讨论】:
-
替换脚本元素的 html 没有任何作用,因为它发生在脚本执行之后,并且在 Chrome 中没有办法事先做到这一点。它不会像这样工作。您必须在加载之前取消脚本 URL,自己下载其内容,更改它,作为新的脚本元素插入。在某个地方应该有一个这样做的例子,继续寻找。
-
脚本不是从 url 加载的。它的内容被注入到脚本标签中。这有什么不同吗?
-
然后您需要覆盖整个页面:1)
window.stop()2) 获取原始 html vix XHR/fetch 3) 进行文本替换 4) 通过document.write()覆盖页面/跨度> -
我花了很多时间尝试遵循您的建议。但我不能,我还是 chrome 扩展和内容脚本的新手。我将在 8 小时内提供 50 - 100 点的赏金,以期获得更具指导性的答案。谢谢你的建议:)
-
类似this script。
标签: javascript google-chrome google-chrome-extension content-script browser-extension