JavaScriptとXULを使用してFirefox拡張機能を作成しています。私のコードの一部は、いくつかのXULマークアップを取り、それを既存のコンテナ要素の中に動的に追加する必要があります。ですから、基本的にはappendChild()を必要としますが、Nodeオブジェクトの代わりにテキスト文字列を使用する必要があります。これを行うには、this質問に記載されている方法を試しました。残念ながら、これは動作していないようです。 div.childNodesは空のnodeListを返します。これはコンテナに追加することもできません。エラーは マークアップの文字列からDOMにXUL要素を追加する
Error: Could not convert JavaScript argument arg 0 [nsIDOMXULElement.appendChild]
私は間違っています。この作業を行う方法や、コンテナのマークアップを動的に設定する別の方法がありますか?
注:コンテナエレメントのタイプはrichlistbox
です。
function updateContainerData(containerName){
try{
var resultsArray = DB.queryAsync("SELECT nodeData FROM waffleapps_privateurl");
container = document.getElementById(containerName);
for (var i = 0; i < resultsArray.length; i++) {
/*
// This works - appending an actual Node (duplicate from a template)
template = document.getElementById("list-item-template");
dupNode = template.cloneNode(true);
dupNode.setAttribute("hidden", false);
container.appendChild(dupNode);
*/
// This doesn't work
div = document.createElement("div");
//var s = '<li>text</li>';
var s = "<richlistitem id ='list-item-template'><hbox><checkbox label='' checked='true'/> <description>DESCRIPTION</description><textbox>test</textbox><textbox></textbox></hbox></richlistitem>";
div.innerHTML = s;
var elements = div.childNodes;
container.appendChild(elements); // error
}
}
catch(err){
alert("Error: " + err.message);
}
}
次のコードを使用してもう少し進んでいます。これでコンテナにHTML要素を挿入できましたが、XUL要素が正しく解析されないように見えます。チェックボックスとテキストボックスは表示されません。私はこれをどのように変更してHTMLとXULのマークアップを正しく解析するかわからない。
var s = "<richlistitem id ='list-item-template'><hbox><checkbox label='' checked='true'/> <description>DESCRIPTION</description><textbox>test</textbox><textbox></textbox></hbox></richlistitem>";
var dp = new DOMParser();
container.appendChild(dp.parseFromString(s, "text/xml").documentElement);
残念ながら要素nodelistとは、何らかの理由で、空です。 – Bryan