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

时间:2016-12-11 04:16:48

标签: javascript css google-chrome-extension browser-action

有没有办法从browserActionpageAction图标禁用/启用 CSS 内容脚本?我在谈论在一组特定的匹配页面上运行CSS内容脚本的脚本,如清单中所定义。因此,如果清单包括:

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

会在somewhere.css上注入somewhere.com。有没有办法编写可以完全启用或禁用CSS内容脚本的browserActionpageAction选项弹出窗口?

我知道我可以编写一个JavaScript内容脚本来侦听这样的选项弹出窗口,然后向页面添加/减去CSS规则和/或类。但我希望在页面呈现之前插入这个CSS,据我所知,唯一的方法是使用CSS内容脚本。

但是,有没有办法从弹出窗口中完全启用或禁用扩展名 - 只有一个CSS内容脚本?我看不到这样做的方法。

2 个答案:

答案 0 :(得分:2)

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

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

根据您想要做的具体内容,更合适的方法可能是使用包含chrome.declarativeContent操作的onPageChanged RequestContentScript规则。但是,有关混合的迹象表明Chrome实际上支持稳定版本。此外,它无法提供runAt属性。因此,它可能不适合你正在做的事情。

答案 1 :(得分:0)

您无法更改"newProjectRoot": "projects"的内容,一旦在其中指定了manifest.json,它们就会一直被加载。

如果在注入内容脚本时需要更大的灵活性,则必须使用新的contentScripts.register() Firefox API及其Chrome polyfill来注册和取消注册脚本。

但是,API需要重新加载页面才能注入和删除CSS。您可以改用即时content_scripts,但是如果不重新加载CSS,您仍然不能删除 CSS。

注意:请勿使用chrome.tabs.insertCSS,因为它基本上没有使用并且不受支持,特别是breaks with CSS