Hatena::Groupmoz-addon

hogezilla RSSフィード

当ページに書かれているコードは、修正BSDライセンスのもと、再頒布して頂いて構いません。

 | 

2013-03-06

Bug-407956 Firefox 22 で nsITreeView の nsISupportsArray が削除された件の対応

21:34 | はてなブックマーク - Bug-407956 Firefox 22 で nsITreeView の nsISupportsArray が削除された件の対応 - hogezilla

nsITreeViewの実装が変更され、 以下のメソッドのnsISupportsArray型のpropertiesが削除された。

  • getCellProperties (in long row, in nsITreeColumn col, in nsISupportsArray properties)
  • getColumnProperties (in nsITreeColumn col, in nsISupportsArray properties)
  • getRowProperties (in long index, in nsISupportsArray properties)

Firefox22からは、properties.AppendElement(nsIAtom)をするのではなく、文字列を空白区切りで返すことになる。

とはいえ、アドオン作成としてはFirefox21-との互換性も重要なので、両対応のメソッドを定義する必要がある。

Firefox21-とFirefox22+の両対応

getRowPropertiesをサンプルに両対応コード例を書いておく。

function nsICustomTreeView () {
  this.rows = [];
}
nsICustomTreeView.prototype = {
  // ....
  getRowProperties: function (row, properties) {
    var item = this.rows[row];
    var isSupportsArray = true;
    if (!properties) {
      isSupportsArray = false;
      properties = Cc["@mozilla.org/supports-array;1"].createInstance(Ci.nsISupportsArray);
    }
    /*
      今まで通り properties.AppendElement するコード
     */
    if (!isSupportsArray) {
      let props = [];
      for (let i = 0, len = properties.Count(); i < len; ++i) {
        props.push(properties.GetElementAt(i));
      }
      return props.join(" ");
    }
  },
  // ...
};
  1. Firefox22+では、propertiesは渡ってこないので、存在しないならnsISupportsArrayを生成する
    • その際、フラグ設定もしておく
  2. これまで通り、properties.AppendElement(...)していく
  3. 最後に、配列に突っ込んで、連結して返す

Services.vc.compare(Services.appinfo.version, "22.0a1")等で比較をして、メソッド自体を書き換えたほうが効率が良いかもしれない。

トラックバック - http://moz-addon.g.hatena.ne.jp/teramako/20130306
 |