【问题标题】:"content_scripts" not working in chrome v38+?“content_scripts”在 chrome v38+ 中不起作用?
【发布时间】:2014-12-06 12:43:21
【问题描述】:

最近,我做了一个 Chrome 扩展来强制所有网页使用给定的字体。它曾经工作得很好,但从昨天(可能更早)就停止了工作。

扩展的关键代码是:

manifest.json文件内容:

{
    ...

    "content_scripts": [{
        "matches":  ["http://*/*", "https://*/*"],
        "js": ["font.js"],
        "run_at":"document_start"
    }],
    "web_accessible_resources": ["font.css"]
}

font.js文件内容:

var link = document.createElement("link");
link.href = chrome.extension.getURL("font.css");
link.type = "text/css";
link.rel = "stylesheet";
document.documentElement.insertBefore(link);

font.css文件内容:

* {
  font-family: "Microsoft Yahei Mono", "Microsoft Yahei", sans-serif !important; 
}

谁能告诉我这里发生了什么或建议在启动网页文档时运行js 文件的替代方法?

【问题讨论】:

  • -1:“停止工作”并且没有代码,抱歉,但这无法回答。请附上您的代码。
  • 向我们提供您的内容脚本的代码,否则无法知道导致错误的原因。大多数情况下,在document_start 中运行时,脚本会停止工作,因为某些元素尚未加载......但如果没有看到您的代码就不可能说出来。
  • @Xan 添加了代码。谢谢。
  • @MarcoBonelli 添加了代码。谢谢。

标签: javascript json google-chrome google-chrome-extension google-chrome-devtools


【解决方案1】:

从 Chrome 38 开始,Chrome 遵循 DOM 标准,并在 .insertBefore 省略所需参数时引发异常(请参阅 https://crbug.com/419780)。

要修复您的代码,请使用

document.documentElement.insertBefore(link, null);
// or equivalently,
document.documentElement.appendChild(link);

我建议使用"css" 键而不是内容脚本来插入样式表。那么你就不再需要font.js了(样式表也将在安装后立即应用)。

{
    "manifest_version": 2,
    "name": "my extension",
    "version": "1.0",

    "content_scripts": [{
        "matches":  ["http://*/*", "https://*/*"],
        "css": ["font.css"],
        "run_at":"document_start"
    }]
}

【讨论】:

  • 仅供参考:我实际上需要使用font.js,因为我还需要允许多个网页使用其原始字体。
猜你喜欢
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 2013-04-18
  • 2011-12-11
  • 2013-07-25
  • 2016-01-26
  • 2013-03-22
相关资源
最近更新 更多