2008-08-06 35 views
18

我正在用XMLHttpRequest下載一個網頁(標籤湯HTML),我想要輸出並將它變成一個DOM對象,然後我可以運行XPATH查詢。如何將字符串轉換爲DOM對象?如何將一串HTML轉換爲Firefox擴展中的DOM對象?

看來,一般的解決方案是創建一個隱藏的iframe,並將字符串的內容扔進去。已有talk更新DOMParser以支持text/html,但從Firefox 3.0.1開始,如果嘗試,仍然會得到NS_ERROR_NOT_IMPLEMENTED

除了使用隱藏的iframe技巧之外,還有其他選擇嗎?如果不是,做iframe技巧的最佳方法是什麼,以便您的代碼在任何當前打開的選項卡的上下文之外工作(以便關閉選項卡不會搞砸代碼等)?

This就是爲什麼我在尋找比IFRAME黑客以外的解決方案的例子,如果我有寫所有的代碼有一個強大的解決方案,那麼我寧願繼續尋找別的東西。

回答

4

試試這個:

var request = new XMLHttpRequest(); 

request.overrideMimeType('text/xml'); 
request.onreadystatechange = process; 
request.open ('GET', url); 
request.send(null); 

function process() { 
    if (request.readyState == 4 && request.status == 200) { 
     var xml = request.responseXML; 
    } 
} 

通知的overrideMimeType的responseXML
readyState == 4是'completed'。

+0

如果響應不是有效的XML,那麼這不起作用。如果您告訴Firefox期望XML,它將嚴格分析它將解析的內容。 – thelsdj 2010-06-06 23:07:43

1

嘗試創建一個div

document.createElement('div'); 

然後標籤湯HTML設置到div的innerHTML。瀏覽器應該將其處理成XML,然後解析。

文字屬性採用字符串 指定 文本和元素的有效組合。當設置innerHTML屬性時,給定的字符串 將完全替換對象的現有內容 。如果字符串 包含HTML標記,則將字符串 解析並格式化,因爲它將 放置到文檔中。

+0

這個問題是我需要整個HTML文檔,和所有這將扔掉。 此外,我試圖不使用現有的窗口/選項卡,因爲我的代碼運行在他們的上下文之外,我想抵抗用戶隨機關閉窗口或選項卡使我的代碼被中斷(假設Firefox仍在運行) 。 – thelsdj 2010-06-06 23:08:40

1

所以,你想使用JavaScript下載一個網頁作爲XML對象,但你不想使用網頁?由於您無法控制用戶將執行的操作(關閉標籤頁或窗口或其他內容),因此您需要像OSX Dashboard小部件或某個單獨的應用程序那樣執行此操作。 Firefox擴展也可以工作,除非你必須擔心用戶關閉瀏覽器。

+0

是的,我使用的是Firefox擴展,但大多數iframe示例使用任意瀏覽器窗口而不是核心進程中的對象來阻止瀏覽器/選項卡關閉。 – thelsdj 2010-06-06 23:08:05

1

除了使用隱藏的iframe技巧之外,還有其他選擇嗎?

不幸的是,不,現在。否則,您指向的microsummary代碼將使用它。

如果沒有,什麼是應該做的IFRAME招讓你的代碼工作的任何當前打開的標籤(以便關閉標籤頁不會搞砸代碼等)的範圍之外的最佳方法?

您引用的代碼使用最近的瀏覽器窗口,因此關閉製表符不會影響解析。關閉瀏覽器窗口會中止你的負載,但你可以處理它(檢測負載是否中止,並在另一個窗口中重新啓動它),而且不會經常發生。

您需要一個DOM窗口才能正常工作,因此目前沒有乾淨的解決方案(如果您熱衷於使用mozilla解析器)。

相關問題