2011-08-14 76 views
0

我在我的browser.xul代碼中,我打算從html文件中獲取數據並將其插入到div元素中。
我試圖使用div.innerHTML,但我得到一個異常:
在xul中設置innerHTML

組件返回故障代碼:0x804e03f7 [nsIDOMNSHTMLElement.innerHTML]

我試圖解析使用組件的HTML .interfaces.nsIScriptableUnescapeHTML並將解析後的html附加到我的div中,但我的問題是樣式(屬性和標記)和腳本沒有解析。

回答

2

首先警告:如果您的HTML數據來自網絡,那麼您正試圖在您的擴展中構建安全漏洞。來自網絡的HTML代碼永遠不會被信任(即使來自您自己的Web服務器和HTTPS),您應該真的使用nsIScriptableUnescapeHTML。樣式應該是你的擴展的一部分,使用來自網絡的樣式是不安全的。欲瞭解更多信息:https://developer.mozilla.org/En/Displaying_web_content_in_an_extension_without_security_issues

至於你的問題,這個錯誤代碼是NS_ERROR_HTMLPARSER_STOPPARSING這似乎意味着解析錯誤。我猜你試圖爲它提供常規的HTML代碼而不是XHTML(這將符合XML)。無論哪種方式,解析XHTML代碼的更好方法是DOMParser,這會給你一個文檔,然後你可以將它插入到正確的位置。

如果要真正解析HTML代碼(不是XHTML),那麼您有兩個選擇。一種是使用元素並在那裏顯示數據。您可以從您的HTML數據生成data:網址:

frame.src = "data:text/html;charset=utf-8," + encodeURIComponent(htmlData); 

如果你不想在你仍然需要一個幀的幀來顯示數據(可以隱藏)已加載HTML文檔(可以是about:blank)。然後,使用Range.createContextualFragment()解析您的HTML字符串:

var range = frame.contentDocument.createRange(); 
range.selectNode(frame.contentDocument.documentElement); 
var fragment = range.createContextualFragment(htmlData); 
+0

我的主要問題是使用iframe,因爲它在panel中有一些iframe問題。關於使用iframe解析數據的第二個選項,您建議在html:div中設置解析數據的位置,它可能是不安全的。 – Yosi

+0

如果安全問題(數據不是來自您的擴展或用戶,而是來自某個Web服務器),那麼您不應該首先使用這種HTML解析。它確實是'