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

问题描述 投票:0回答:2

有什么方法可以从 browserAction

pageAction
图标禁用/启用
CSS
内容脚本吗?我说的是在一组特定的匹配页面上运行 CSS 内容脚本的脚本(如清单中所定义)。因此,如果清单包括:

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

这会将

somewhere.css
注入到
somewhere.com
上。有没有办法编写一个
browserAction
pageAction
选项弹出窗口来完全启用或禁用 CSS 内容脚本?

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

但是,有没有办法从弹出窗口完全启用或禁用仅具有 CSS 内容脚本的扩展程序?我看不出有什么办法可以做到这一点。

javascript css google-chrome-extension browser-action
2个回答
3
投票
不,不幸的是,没有办法关闭

manifest.json

 
content_script
(CSS 或 JavaScript)的注入。  指定的代码将被注入到所有匹配的 URL 中。

为了完全控制注射或不注射,您需要通过

tabs.insertCSS()

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

具体取决于您想要做什么,更合适的实现方法可能是使用

chrome.declarativeContent

 onPageChanged
 规则,其中包括 
RequestContentScript
 操作。然而,有迹象表明 Chrome 的稳定版本实际上支持这一点。此外,它没有能力提供 
runAt
 属性。因此,它可能不适合您正在做的事情。


1
投票
您无法更改

manifest.json

的内容,一旦您在其中指定了
content_scripts
,它们将始终被加载。

如果您在注入内容脚本时需要更大的灵活性,则必须使用新的

scripting.registerContentScripts() 来注册和取消注册脚本。

但是,API 需要重新加载页面才能注入和删除 CSS。您可以使用即时

chrome.tabs.insertCSS

 来代替,但您仍然无法在不重新加载的情况下 
remove CSS。


此外,我编写了 2 个模块来帮助完成整个过程:

添加/删除域 + 注入 CSS 或 JS


注意:

不要使用chrome.declarativeContent

,因为它基本上未使用且不受支持,并且它特别
破坏了CSS

© www.soinside.com 2019 - 2024. All rights reserved.