JavaScript と XUL を使用して Firefox 拡張機能を作成しています。私のコードの一部は、いくつかの XUL マークアップを取り、それを既存のコンテナー要素内に動的に追加できる必要があります。したがって、基本的には appendChild() が必要ですが、Node オブジェクトの代わりにテキスト文字列を使用します。これを行うために、この質問に記載されている方法を試しました。残念ながら、これはうまくいかないようです。div.childNodes が空の nodeList を返すように見えますが、これはコンテナーに追加することさえできません。エラーは
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);