Hatena::Groupmoz-addon

Ci.nsIZIGOROu

2008-06-03><

nsIPropertyBag, nsISimpleEnumerator, nsIProperty

| 14:07 |  nsIPropertyBag, nsISimpleEnumerator, nsIProperty - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  nsIPropertyBag, nsISimpleEnumerator, nsIProperty - Ci.nsIZIGOROu

nsIWritablePropertyBag と wrappedJSObject - Ci.nsIZIGOROu - Mozilla 拡張機能勉強会 の続き。

キーの列挙は nsIPropertyBag.enumerator を他の変数に使うたびに代入して行う。

コードとしては下記のような感じになるかなと。

var props = Cc["@mozilla.org/hash-property-bag;1"].createInstance(Ci.nsIWritablePropertyBag);
// 中略、ここでキーに色々入れる
var iterator = props.enumerator;
while (iterator.hasMoreElements()) {
  with ({prop: iterator:getNext()}) {
    prop.QueryInterface(Ci.nsIProperty);
    // 以下略
  }
}

hasMoreElements() で確認して getNext() するんだけど、この際にnsISuportsで返ってくるんだけど、nsIProperty を実装したオブジェクトが返ってくるので QueryInterface で型変換する。

name, valueと言うメンバ変数がreadonlyで提供されるので、これで元のhashのキーと値が取れる寸法。

インターフェース操作、要するにQueryInterfaceを何度か駆使しなきゃいけないのは面倒だけど、こうしてJSオブジェクトが突っ込めるハッシュがあると便利だな。