3

我正在为 Chrome、Firefox 和 Safari 编写一个相当复杂的浏览器扩展。

在 Chrome 和 Firefox 中,我可以根据 URL 匹配指定将哪些内容脚本注入哪些站点。

Safari 似乎没有提供任何此类(细粒度)功能——它们只允许所有站点使用一个白名单/黑名单。

有没有办法做到这一点?如果没有,我如何有条件地加载 Javascript 文件?(记住我不能将它们添加到 DOM 中)。

我试过yepnope,但它附加到 DOM。

注意:我不想在实际文件中添加逻辑,因为它们本质上是跨扩展复制的库代码。

4

2 回答 2

9

safari.extension.addContentScriptsafari.extension.addContentScriptFromURL允许您以编程方式注入脚本。您可以在全局页面、扩展弹出框或扩展栏中使用这些方法。对于这两种方法,参数是:

  • 要注入的脚本(分别作为字符串或 URL),
  • URL 模式的白名单,以匹配注入脚本的页面,
  • 排除页面的黑名单,以及
  • 是否将脚本作为结束脚本(或作为开始脚本)注入的布尔值。

有关详细信息,请参阅Safari 扩展参考中的此页面

请注意,白名单和黑名单都使用与 UNIX 通配符相似(但不相同)的 URL 模式格式,并且不如正则表达式强大。此模式格式在本页底部进行了说明。

于 2012-04-28T23:00:16.247 回答
4

接受的答案是正确的,但重要的是要注意,您不能以编程方式将脚本注入当前打开的选项卡,如 Chrome 和 Firefox 可以。SafariExtension类参考声明:

添加和删​​除样式表和脚本。添加或删除内容样式表会立即应用于页面。添加或删除内容脚本仅适用于在该点之后打开或重新加载的页面。删除 Info.plist 文件中的样式表或脚本只会将其从当前浏览器会话中删除。

由于这个限制,通常更容易简单地依赖Scriptsin 的属性Info.plist

于 2014-03-07T16:56:00.363 回答