javascript - "content_scripts"无法在 Chrome v38+ 中工作?

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

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

扩展的关键代码是:

manifest.json file content:

{
    ...

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

font.js file content:

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 file content:

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

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

最佳答案

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

关于javascript - "content_scripts"无法在 Chrome v38+ 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26314783/

相关文章:

javascript - 如何获取网页中元素中文本的字体大小

java - 尽管之前在 AsyncTask 类中定义过,但 JSON 对象为 null?

sqlite - 确定 HTML5 数据库内存使用情况

android - 使用 gmap3 的 Google map 无法在 Android 平板电脑上的 Chrome 浏览器 18 上正确呈现

javascript - $ slider .css( {'transform' : 'translateY(' + (-$height * $counter) + 'px)' })

javascript - JQuery anchor 链接事件处理程序不适用于 "this"

javascript - 具有 URL 更改和两列的 Webix 布局

asp.net - 使用 LINQ 和 Entity Framework 出现错误 "No best type found for implicitly-typed array"

json - Scala 发送 GET 请求,无法解析 json 响应

html - Chrome 18 围绕表单元素呈现伪影