因此,我尝试按照使用 WebExtensions 的 Firefox 扩展的说明进行操作,并且希望将内容脚本附加到某些页面(如此处所述: https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Modify_a_web_page )。
问题是,当我编写扩展但从本地存储加载它时,我不想指定希望 content_script 在 manifest.json 中运行的页面集,即,我设置了一个选项页面,其中用户可以指定内容脚本应运行的页面。是否可以动态更改通常使用 manifest.json 中的 content_script 指令设置的要修改的页面列表?
谢谢
最佳答案
不,无法修改 manifest.json
content_script
注入(inject)的 URL(CSS 或 JavaScript)。指定的代码将被注入(inject)到所有匹配的 URL 中。这是有多种原因的。
这不可能的原因之一是对用户的安全性/透明度。 manifest.json 显式声明您的内容脚本将修改哪些 URL,声明它将修改事件选项卡,或者它将有权访问所有 URL/选项卡。如果您被允许更改 URL,那么您将实际上获得访问所有 URL 的能力,而无需明确声明您正在这样做。
是的,可以有一种方法来声明您将这样做。 Chrome 有一种实验性的方法来做到这一点:chrome.declarativeContent
。在 Chrome 中,这被认为是实验性的,即使在推出几年之后也是如此。它在 Firefox 中不可用。目前还不清楚它何时可用,甚至是否会在 Firefox 中可用。此外,即使在 Chrome 中,它也缺乏其他注入(inject)脚本方法(例如 run_at
/runAt
)可用的一些功能。
为了完全控制注入(inject)或不注入(inject),您需要通过 tabs.insertCSS()
执行注入(inject)和/或 tabs.executeScript()
。使用这些方法注入(inject)或不注入(inject)脚本和 CSS 完全由扩展中的 JavaScript 控制。使用这些方法可以获得与使用 manifest.json
content_script
条目获得的类似功能,但具有更多控制权。这种更大的控制是以更大的复杂性为代价的。
关于javascript - 动态修改FireFox扩展中的content_scripts.matches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41122368/