2012-01-22 106 views

回答

1

我來到了一個類似的問題,並通過以下方式解決它。

根據文檔'Content-Type,我決定將腳本注入到所有文檔中,但僅在正確的文檔中執行,而不是限制注入內容腳本的各種文檔。

這通過分析document.xmlVersiondocument.doctype屬性來完成:

  • document.doctype必須不是HTML文檔中null;
  • document.xmlVersion在XML文檔中必須不是null;

因此,很容易使用它們中的任何一種來區分一種類型,只在適當的時候「綁定」所有必需的腳本。特別是,可以注入小的腳本加載器,這會有條件地加載其他可能很重的東西。

Chrome瀏覽器不提供任何方法來限制文檔類型的腳本注入。

0

執行此操作的最可靠的方法是通過chrome.webRequest.onHeadersReceived,它允許您查詢並保留響應標頭信息(包括Content-Type)。遺憾的是,目前該穩定版本的Chrome尚未推出此API。 (您可以在Chrome的當前版本中使用實驗API,但是您將無法發佈使用它的擴展名。)

一種可能的解決方案是確定是否正在使用Chrome處理注入的文檔作爲XML。 (如果是這樣,請停止處理文檔。)完成此操作的一個竅門是檢查document.getElementById('webkit-xml-viewer-source-xml')是否爲null。 Chrome/webkit的XML查看器的這個元素部分。

+0

如果您的內容腳本在執行操作之前添加了一個事件偵聽器來等待文檔加載,該怎麼辦?例如,'document.addEventListener(「DOMContentLoaded」,function(){do.stuff()};'。 – cheeken

+0

這是我應該避免的,我的腳本必須先執行(在文檔加載之前) – spektom

+0

我明白了。在這種情況下,我沒有其他建議,祝你好運。 – cheeken

相關問題