最近,我制作了一个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
文件的其他方法吗?
答案 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"
}]
}