我想在youtube(内容脚本)中使简单的chrome扩展工作,但它似乎无法正常工作。
奇怪的是,它有时会起作用,有些则很简单。
我的最终目标是让它仅在视频网址中有效,但在此之前我就陷入困境。
我最初尝试过:
"matches": [ "http://www.youtube.com/*" ]
没有取得任何成功,我发现这很奇怪,所以我想这是我的第一个问题,因为在我做的另一个扩展中,它完美适用于http://twitter.com/
我阅读了一些youtube扩展程序的代码,并使用了一个:
"matches": [ "*://*.youtube.com/*" ]
奇怪的是,这有时只能起作用,我无法重现/理解何时。当我重新加载页面时,它肯定不起作用,但在某些URL中它只是起作用。
实际脚本是用于调试的裸骨脚本:
$(window).load(function() {
alert(2);
});
所以我对这种不一致的行为感到很困惑。
编辑:
这个网址似乎不起作用:
这样做:
编辑2:
整个清单:
{
"name": "__MSG_extname__",
"version": "0.1",
"default_locale": "en",
"manifest_version": 2,
"icons": {
"16": "images/icon16.png",
"48": "images/icon48.png",
"128": "images/icon128.png" },
"content_scripts":[
{
"matches": [ "*://*.youtube.com/*" ],
"js": ["jquery.min.js", "script.js"]
}
],
"web_accessible_resources": ["images/down-arrow.png"]
}
答案 0 :(得分:1)
您需要发布或链接到整个manifest.json
,但最可能的问题是$(window).load( ...
。
By default, Chrome content scripts fire at unpredictable times which could be either before or after window.onload
fires!
因此,在您的清单中添加"run_at": "document_end"
以确保您的脚本将在可预测的时间以及window.onload
之前运行。
~~~
接下来,it is possible that other extensions are blocking that alert。如果需要,请检查并停用其他扩展程序。
~~~
最后,可能是YouTube通过AJAX加载了一些页面 - 虽然我找不到它目前的情况。加载AJAX的页面不会重写您的内容脚本。如果您发现AJAX加载“新”页面的情况,(1)在此处使用配方进行评论,(2)您可以use AJAX-aware techniques to refire code as necessary。 (请注意,waitForKeyElements.js
将通过清单而不是@require
指令添加。)