如何从Chrome扩展程序的选项页面启用/禁用manifest.json CSS内容脚本?



是否有任何方法可以从browserActionpageAction ICON禁用/启用A css 内容脚本?我说的是在一组匹配的页面上运行CSS内容脚本的脚本(如清单中定义的)。因此,如果清单包括:

"content_scripts": [
  {
    "matches": [ "*://*.somewhere.com/*" ],
    "css": ["somewhere.css"]
  }
]

将在somewhere.com上注入somewhere.css。有什么方法可以编写可以完全启用或禁用CSS内容脚本的browserActionpageAction选项?

我知道我可以编写一个JavaScript内容脚本,该脚本会听取此类选项弹出窗口,然后在页面中添加/减去CSS规则和/或类。但是我希望在之前插入此CSS 毫无疑问,据我所知,唯一的方法是使用CSS Content脚本。

但是,是否有一种方法可以完全启用或禁用扩展名(只有CSS内容脚本)从弹出窗口中?我看不到这样做的方法。

不,不幸的是,无法关闭manifest.json content_script(CSS或JavaScript)的注入。指定的代码将在所有匹配的URL中注入。

为了完全控制注射或不注射,您需要通过tabs.insertCSS()和/或tabs.executeScript进行注入。注射或不注射这些方法的脚本和CSS完全由JavaScript的控制在您的扩展中。当然,使用这些方法与manifest.json content_script条目获得的功能当然可以获得类似的功能,但具有更多的控制和复杂性。

确切地取决于您想做的事情,更合适的方法可能是使用包括RequestContentScript操作的chrome.declarativeContent onPageChanged规则。但是,对于稳定的Chrome构建,实际上支持了这一点。另外,它没有提供runAt属性的能力。因此,它可能不适合您正在做的事情。

您将无法更改manifest.json的内容,一旦指定了content_scripts,它们将始终加载。

如果您在注入内容脚本时需要更大的灵活性,则必须使用新的contentscripts.register()firefox api及其Chrome polyfill才能注册和取消注册脚本。

但是,API需要重新加载以注入和删除CSS。您可以改用即时chrome.tabs.insertCSS,但是您仍然无法删除没有重新加载的CSS。


此外,我编写了2个模块来帮助整个过程:添加/删除域 注入CSS或JS


注意:不要使用chrome.declarativeContent,因为它基本上是未使用且未支持的,并且专门用CSS

破坏了

最新更新