0

最近,我做了一个Chrome扩展,强制所有网页使用给定的字体。它曾经工作得很好,但从昨天开始停止工作(也许更早)。“content_scripts”在chrome v38 +中不起作用?

为延长密钥代码:

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

-1:“停止工作”,没有代码,很抱歉,但这是无法回答的。请包含您的代码。 – Xan 2014-10-11 13:15:48

+0

向我们提供您的内容脚本的代码,否则不可能知道是什么导致了错误。大多数情况下,在'document_start'中运行时,脚本会停止工作,因为某些元素尚未加载......但是如果没有看到代码就说不出来。 – 2014-10-11 13:36:25

+0

@Xan添加了代码。谢谢。 – herohuyongtao 2014-10-11 14:06:05

回答

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" 
    }] 
} 
+0

工作就像一个魅力!非常感谢。 – herohuyongtao 2014-10-11 14:11:59

+0

fyi:我实际上需要使用'font.js',因为我还需要允许几个网页使用它的原始字体。 – herohuyongtao 2014-10-11 14:15:00