有条件地将内容脚本加载到 Safari 扩展中,就像在 FF/Chrome 中一样



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

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

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

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

我已经尝试过是的,但它附加到 DOM 中。

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

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

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

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

请注意,白名单和黑名单都使用与 UNIX 通配符相似(但不完全相同)的 URL 模式格式,并且不像常规表达式那样强大。本页底部介绍了此模式格式。

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

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

由于此限制,通常更容易简单地依赖 Info.plist 中的 Scripts 属性。

最新更新