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