4

有什么方法可以从或图标禁用/启用CSS内容脚本?我说的是在一组特定的匹配页面上运行清单中定义的 CSS 内容脚本的那种脚本。因此,如果清单包括:browserActionpageAction

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

这将注入somewhere.css. somewhere.com有没有办法编写可以完全启用或禁用 CSS 内容脚本的browserAction或选项弹出窗口?pageAction

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

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

4

2 回答 2

3

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

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

根据您想要做什么,更合适的方法可能是使用包含操作的规则。然而,有各种迹象表明 Chrome 的稳定版本实际上支持这一点。此外,它没有提供属性的能力。因此,它可能不适合您正在做的事情。chrome.declarativeContent onPageChangedRequestContentScriptrunAt

于 2016-12-11T04:42:25.233 回答
1

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

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

然而,该 API 需要重新加载页面以注入和删除 CSS。您可以改用即时chrome.tabs.insertCSS,但您仍然无法在不重新加载的情况下删除CSS。


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


注意:不要使用chrome.declarativeContent,因为它基本上是未使用和不受支持的,并且它特别与 CSS 中断

于 2019-07-01T07:53:10.720 回答