XPCOMで配列を使う

XPCOMのattributeに配列を入れたい場合,
nsIArrayなどでラップしないといけない。めんどくせー
読み込みのみの配列の場合は、nsIArrayを使い,削除追加をする場合は
nsIMutableArrayを使う。
例えば, nsIURIの配列を作る場合

初期化

var com = Components.classes["@mozilla.org/array;1"].createInstance();
var a = com.QueryInterface(Components.interfaces.nsIMutableArray);

値を追加

a.appendElement(element(nsIURI型), false);

値を得る

この場合は一番目の要素

var url = a.queryElementAt(0, Components.interfaces.nsIURI);

ふう。クロスプラットフォーム/クロス言語って大変なんですね。
ちなみに、配列の初期化でcomponents.classes.getserveceを使ってしまい,全配列の中身が同じになってしまいハマりました。

参考:
http://www.mozilla.org/projects/xpcom/array-guide.html#nsIArray
http://xulplanet.com/references/xpcomref/comps/c_array1.html