如何在Chrome扩展程序中匹配youtube的网址?

时间:2013-02-18 22:40:06

标签: javascript jquery google-chrome content-script

我想在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"]
}

1 个答案:

答案 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指令添加。)