javascript - 动态修改FireFox扩展中的content_scripts.matches

标签 javascript firefox content-script firefox-addon-webextensions manifest.json

因此,我尝试按照使用 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/

相关文章:

javascript - 自动滚动到 Gridview asp.net 中最后插入的行

javascript - 是 tabIndex : 0 in links considered a good practice in order to avoid href ="javascript: void(0);"?

python - 如何获得第 3 方 cookie?

javascript - Firefox 中不显示打印预览页面

javascript - 如何在 Chrome 扩展内容脚本中使用 google api?

javascript - 为什么此示例中 "this"的上下文会发生变化?

javascript - jquery 更改下拉列表中的占位符输入

css - Firefox 和 Chrome/IE 之间的显示差异

javascript - 无法从后台脚本以外的脚本访问 chrome 对象或 chrome.tabs 对象

javascript - 如何在页面的 Javascript 执行后加载内容脚本?