如何通过 Chrome 扩展程序将 CSS 注入网页?

IT技术 javascript css google-chrome google-chrome-extension
2021-03-12 21:07:25

我不知道如何通过 Chrome 扩展程序将 CSS 注入网页。我正在尝试将其注入网页:

body {
   background: #000 !important;
}

a {
   color: #777 !important;
}

这是我的 manifest.json:

{
"update_url":"http://clients2.google.com/service/update2/crx",
  "name": "Test Extension",
  "version": "1.0",
  "description": "This is a test extension for Google Chrome.",
  "icons": { "16": "icon16.png",
           "48": "icon48.png",
          "128": "icon128.png" },
  "background_page": "background.html",
  "browser_action": {
    "default_icon": "icon19.png"
  },
  "content_scripts": [
    {
      "matches": ["http://test-website.com/*"], 
      "js": ["js/content-script.js"]
    }
  ],

    "permissions": [ "tabs", "http://test-website.com/*" ]

}
2个回答

您可能必须在清单文件中添加额外的行:

"content_scripts": [
    {
      "matches": ["http://test-website.com/*"], 
      "js": ["js/content-script.js"],
      "css" : ["yourcss.css"]
    }
],

中定义的 CSS 文件"css": ["..."]将添加到与 中提到的位置匹配的每个页面中matches

如果您正在开发 Chrome 扩展程序,请确保您查看以下页面:

  1. 开发者指南
关于这如何与 chrome 应用程序包装器而不是扩展一起工作的任何想法?清单有点不同,添加 content_scripts 部分似乎没有产生任何结果。
2021-04-25 21:07:25
不错的答案!可以在 content_script 中注入 CSS 真是太棒了!
2021-05-10 21:07:25

您还可以使用Chrome Tabs API 网页上详述的以下语法将 css 文件注入一个或多个选项卡的内容

chrome.tabs.insertCSS(integer tabId, object details, function callback);

当然,您首先需要目标选项卡的 ID。

Chrome 扩展文档没有讨论如何解释注入的 CSS,但事实是通过这种方法或通过将它们包含在清单中注入网页的 CSS 文件被解释为用户样式表。

在这方面,重要的是要注意,如果您确实使用这些方法注入样式表,它们将受到一种关键方式的限制(至少,从 Chrome v.19 开始):Chrome 忽略用户样式表中的“!important”指令. 您注入的样式规则将被页面中包含的任何内容所取代。

如果您想避免注入内联样式规则,一种解决方法如下(我使用 jQuery 进行实际插入,但可以使用直接的 Javascript 来完成):

$(document).ready(function() {
var path = chrome.extension.getURL('styles/myExtensionRulz.css');
$('head').append($('<link>')
    .attr("rel","stylesheet")
    .attr("type","text/css")
    .attr("href", path));
});

然后,您可以将样式表放在扩展程序的样式文件夹中,但不需要在清单的任何位置列出它。上面的相关部分是您将使用 chrome API 来获取样式表的 URL,然后将其作为链接的 href 值插入。现在,您的样式表将获得更高的优先级,您可以在需要时使用“!important”指令。

这是在最新版本的 Chrome 中对我有用的唯一解决方案。

这是在 Firefox 上解决此错误 1417569的好方法
2021-04-28 21:07:25