3

我正在尝试使 simples chrome 扩展在 youtube(内容脚本)中工作,但它似乎无法正常工作。

奇怪的是,它在某些时候有效,而有些简单却无效。

我的最终目标是让它只在视频 URL 中工作,但在此之前我被卡住了。

我最初尝试过:

"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"]
}
4

1 回答 1

1

您需要发布或链接到您的全部manifest.json内容,但最可能的问题是$(window).load( ...
默认情况下,Chrome 内容脚本会在不可预知的时间触发,可能是在window.onload触发之前或之后!

因此,添加"run_at": "document_end"到您的清单以保证您的脚本将在可预测的时间运行,并且在window.onload.

~~~
接下来,有可能是其他扩展阻止了这个警报。根据需要检查并禁用您的其他扩展。

~~~
最后,可能是YouTube通过AJAX加载了一些页面——虽然我目前找不到它这样做的案例。AJAX 加载的页面不会重新触发您的内容脚本。如果您发现 AJAX 加载“新”页面的情况,(1)在此处使用配方评论,(2)您可以使用 AJAX 感知技术根据需要重新触发代码。(请注意,waitForKeyElements.js这将通过清单而不是@require指令添加。)

于 2013-02-19T00:40:25.043 回答