Logic Delight

明日のワシは忘れてしまうから、コードにはコメントを書くのです。

Firefox用スクリプト「重複タブを閉じる」

gBrowserのリファレンスを探すのに苦労した・・・。
あと、gBrowser.removeTab(target);って書くと怪しい挙動をして、相当ハマった。
removeTab()の引数は tab だから、browser を渡しちゃイカンよね。

// URLのアンカー指定を除く
function getPlaneUrl(url){
  url = url.replace(/#.*/, '');
  return url;
}
//重複タブを閉じる
var tabs = gBrowser.mTabContainer.childNodes;
for (var i = 0; i < tabs.length; i++) {
  var base = gBrowser.getBrowserForTab(tabs[i]);
  var url = getPlaneUrl(base.currentURI.spec);

  var targets = gBrowser.mTabContainer.childNodes;
  for (var j = targets.length - 1; i < j; --j) {
    var target = gBrowser.getBrowserForTab(targets[j]);

    if (url == getPlaneUrl(target.currentURI.spec)) {
      gBrowser.removeTab(targets[j]);
    }
  }
}

修正履歴:
・アンカー指定でのURL違いは無視するようにした。
 (Getパラメタ指定でのURL違いは・・・、区別したほうがいい気がする。)

【参考URL】
タブブラウザ用コード - MDC
tabbrowser - MDC