因此,我正在尝试使用WebExtensions遵循firefox扩展的说明,并且我想将内容脚本附加到某些页面(如下所述:https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Modify_a_web_page) .
问题是当我编写扩展但从本地存储加载它时,我不想指定我希望在manifest.json中运行content_script的页面集,即,我有一个选项页面设置,用户可以在其中指定应该运行内容脚本的页面 . 是否可以动态更改通常使用manifest.json中的content_script指令设置的要修改的页面列表?
谢谢
2 回答
不,没有办法修改
manifest.json
content_script
(CSS或JavaScript)注入的URL . 指定的代码将注入所有匹配的URL中 . 这有多种原因 .这是不可能的原因之一是用户的安全性/透明性 . manifest.json显式声明您的内容脚本将修改哪些URL,声明它将修改活动选项卡,或者它将访问所有URL /选项卡 . 如果您被允许更改URL,那么您将有效地访问所有URL,而无需明确声明您正在这样做 .
是的,有可能有办法宣布你会这样做 . Chrome有一个实验性的方法来使用chrome.declarativeContent . 在Chrome中,这被认为是实验性的,即使可以使用几年/几年 . 它在Firefox中不可用 . 什么时候可用,或者即使它在Firefox中可用也不清楚 . 此外,即使在Chrome中,它也缺少其他注入脚本方法的功能(例如
run_at
/runAt
) .为了完全控制注射或不注射,您需要通过tabs.insertCSS()和/或tabs.executeScript()进行注射 . 使用这些方法注入或不注入脚本和CSS完全在扩展中的JavaScript控制之下 . 使用这些方法可以获得使用
manifest.json
content_script
条目获得的类似功能,但具有更多控制权 . 这种更大的控制是以更大的复杂性为代价的 .那个怎么样?有很多事件要听,你可以挑选任何满足你要求的事件:
onBeforeNavigate
onCommitted
onDOMContentLoaded
onCompleted .
文档是here . 这是如何在
example.com
的子域上创建红色背景的示例 . 当然,您可以动态构建URL过滤器列表,这只是一个PoC: