我有這個JavaScript從服務器獲取html部分。我能夠在警告消息中返回html,並且它是正確的代碼。將HTML附加到XUL(Firefox擴展)
ajax: function(url){
var request = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance(Components.interfaces.nsIXMLHttpRequest);
request.onreadystatechange = function() {
if (request.readyState == 4) {
// only if "OK"
if (request.status == 200) {
var popup = document.getElementById("ajax"); // a <menupopup> element
var txt = request.responseText;
alert(txt);
popup.appendChild(txt);
} else {
alert("There was a problem retrieving the XML data:\n" +
request.statusText);
}
}
};
request.open("GET", url, true);
request.send(null);
}
的XUL/HTML從服務器返回:
<menuitem>
<html:h2><html:a href="http://google.com">Google</html:a></html:h2>
<html:p><html:table><html:tr><html:td>xxxx</html:td></html:tr></html:table></html:p>
</menuitem>
<menuitem>
<html:h2><html:a href="http://yahoo.com">Yahoo</html:a></html:h2>
<html:p><html:table><html:tr><html:td>yyyy</html:td></html:tr></html:table></html:p>
</menuitem>
我的XUL頁面:
...更多的代碼
<menu class="menu" label="test">
<menupopup id="ajax" width="450" height="700" onpopupshowing="myextension.ajax('http://www.myserver.com/phpscript.php'>
</menupopup>
</menu>
現在,如果我附上了html direc對id ajax的menupopup可以按照預期工作。當我使用appendChild附加它時,它不會。我知道我不能使用appendChild,但在XUL中似乎沒有與innerHTML等效的內容。我無法控制從服務器返回的xul/html,所以我不能使用DOM方法添加內容並繞過html。
我嘗試使用HTMLParser https://developer.mozilla.org/en/Code_snippets/HTML_to_DOM將它轉換爲DOM對象,但似乎並不奏效,我相信因爲它削減了<menuitem>
標記。
任何想法如何將HTML附加到menupopup,以便我可以將它們顯示爲菜單項。
好吧,我試過了iframe的辦法:
ajax: function(url){
var request = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance(Components.interfaces.nsIXMLHttpRequest);
request.onreadystatechange = function() {
if (request.readyState == 4) {
// only if "OK"
if (request.status == 200) {
var frame = document.getElementById("frame");
frame.setAttribute("src", "data:text/html," + encodeURIComponent(request.responseText));
} else {
alert("There was a problem retrieving the XML data:\n" + request.statusText);
}
}
};
request.open("GET", url, true);
request.send(null);
}
與
<iframe id="frame" type="content" src="" />
這似乎並沒有工作。但是,如果我執行encodeURIComponent(request.responseText)的警報,它的編碼是正確的。進而更如果我直接把它添加到這樣的iframe:
<iframe type="content" src="data:text/html,%3Chtml%3E%0A%3Cbody%3E%0A%3Cp%3EHello%20everyone%3C%2Fp%3E%0A%09%3C%2Fbody%3E%0A%3C%2Fhtml%3E%0A%0A"/>
這是行不通的,因爲顯示它需要標籤內的HTML,但HTML中包含這應該是每一個在自己的標籤很多不同的項目。簡單地添加到HTML是行不通的。
如果你控制服務器,AJAX調用返回一些JSON和你想要顯示的數據,然後使用DOM方法或XBL在客戶端構建XUL/HTML結構可能會更好。 – MatrixFrog 2011-06-02 17:25:07
我不能那樣做。實際上,我收到的描述中包含一些HTML的RSS源。我已經解析了RSS feed,以便將HMTL部分從它中解放出來。但是很難解析這個html,以及我不知道將會發生什麼。所以我更喜歡使用html。 – Stofke 2011-06-02 22:45:33
對不起,我沒有注意到你已經說過你無法控制服務器。 – MatrixFrog 2011-06-02 23:22:45