" content_scripts"不使用chrome v38 +?

时间:2014-10-11 12:39:12

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

最近,我制作了一个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 个答案:

答案 0 :(得分:2)

从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"
    }]
}