如何在Chrome扩展中匹配YouTube的URL?

3

我想让一个简单的Chrome扩展在YouTube(内容脚本)中工作,但似乎并不正确。

奇怪的是,它有时候可以工作,有时候就不行。

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

我最初尝试的是:

"matches": [ "http://www.youtube.com/*" ]

我一直没有任何成功的迹象,这让我感到奇怪,所以我想这应该是我的第一个问题,因为在我做另一个扩展时,它完美地适用于http://twitter.com/

我阅读了一些YouTube扩展的代码,其中一个使用了:

"matches": [ "*://*.youtube.com/*" ]

奇怪的是,这种方法只有在某些情况下才有效,我无法复制/理解何时有效。当我重新加载页面时,它肯定不起作用,但在某些URL中它确实有效。
实际脚本是一个用于调试的基本脚本:
$(window).load(function() {
    alert(2);
});

我对这种不一致的行为感到很困惑。

编辑:

这个url似乎不起作用:

这个可以:

编辑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"]
}

你能提供一些在你的脚本中无法工作的URL吗? - lmortenson
我已经更新了问题,它似乎真的是随机的 :( 似乎与URL无关。 - Trufa
1个回答

1
你需要发布或链接到你的整个manifest.json,但最可能的问题是$(window).load( ...
默认情况下,Chrome内容脚本会在不可预测的时间点触发,可能是在window.onload之前或之后!
因此,在你的清单中添加"run_at": "document_end"以确保你的脚本将在可预测的时间点运行,并且在window.onload之前运行。

~~~
接下来,有可能其他扩展正在阻止该警报。如有必要,请检查并禁用其他扩展程序。

最后,可能YouTube通过AJAX加载某些页面--尽管我目前找不到这样的情况。 AJAX加载的页面将不会重新启动您的内容脚本。 如果您发现AJAX加载了一个“新”页面,则可以使用AJAX感知技术根据需要重新启动代码。(请注意,waitForKeyElements.js将通过清单而不是@require指令添加。)


"run_at": "document_end" 似乎解决了问题,非常感谢! - Trufa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接