Home > XUL Apps > Tabbrowser Extensions > Information for Developers

Tabbrowser Extensions: Information for Developers XULアプリ開発者向けの情報

Documents 関連文書

タブブラウザ拡張に関するプレゼンテーション
Mozilla.Party.jp 4.0のXULコンテスト用に用意した資料です。タブブラウザ拡張の実装について解説しています。

Extra Methods and Properties 拡張されるメソッドとプロパティ (2004-08-10)

以下に、タブブラウザ拡張導入後に拡張されるメソッド・プロパティの一部を示します。マウスジェスチャやカスタマイズ可能なボタンに機能を割り付けたり、自作のXULアプリなどでタブブラウザ拡張との連携を行う場合に、参考にして下さい。

プロパティ名 型・種別 説明
tab widget
tabId 文字列 (readonly) そのタブに付けられたID。タブの要素ノードへの参照を使うとメモリリークが発生することがあるため、イベントなどで対処のタブを特定するのには、このIDを使用するのが望ましい(tabbrowserウィジェットのgetTabByTabId()メソッドで、IDからタブを特定できる)。
childTabs 要素ノードの配列 (readonly) そのタブの直接の子として関連付けられたタブの配列。タブグループモードでない場合や子を持っていないタブの場合は、長さ0の配列。tabbrowserのattachTabTo()とdetachTab()を使って編集可能。
hasChildTabs() メソッド そのタブが子タブを持っているかどうかを示す真偽値を返す。childTabsにアクセスするより処理が軽いです。
allChildTabs 要素ノードの配列 (readonly) そのタブの子および孫として関連付けられたタブの一次配列。タブグループモードでない場合や子を持っていないタブの場合は、長さ0の配列。
parentTab 要素ノード そのタブの直接の親として関連付けられたタブ。タブグループモードでない場合やグループ化されていないタブの場合はnull。tabbrowserのattachTabTo()とdetachTab()を使って編集可能。
rootTab 要素ノード (readonly) そのタブが含まれるグループの一番上の親。タブグループモードでない場合・グループ化されていない場合・そのタブ自身が一番上の親の場合、null。
ownerGroup 要素ノードの配列 (readonly) そのタブが所属しているグループの全てのタブの一次配列。タブグループモードでない場合やグループ化されていない場合は、長さ0の配列。
previousTab 要素ノード (readonly) そのタブの前にあるタブ。タブを並べ替えていても、並べ替え後の順番で「前」にあるタブを返す。
nextTab 要素ノード (readonly) そのタブの次にあるタブ。タブを並べ替えていても、並べ替え後の順番で「次」にあるタブを返す。
locked 真偽値 タブのロック(固定)状態を表す真偽値。
referrerBlocked 真偽値 タブの、リファラの送信許可状態を表す真偽値。
autoReloadInterval 整数値 自動リロードの間隔(単位:ミリ秒)。0で停止。
allowPlugins 真偽値 プラグインの許可状態を表す真偽値。
allowJavascript 真偽値 JavaScriptの許可状態を表す真偽値。
allowMetaRedirects 真偽値 ページによる自動ジャンプ/リロードの許可状態を表す真偽値。
allowSubframes 真偽値 フレーム表示の許可状態を表す真偽値。
allowImages 真偽値 画像の読み込み許可状態を表す真偽値。
fixedLabel 文字列 タブの固定ラベル。
tabbrowser widget
getTabByTabId(aID) メソッド tabIdからタブを検索する。返り値はタブまたはnull。tabIdは、タブの要素ノードへの参照を利用できない時に使われる。
tabGroupsAvailable 真偽値 (readonly) タブグループモードが有効かどうかを示す真偽値。
attachTabTo(aTab, aParent) メソッド aTabとして渡したタブを、aParentとして渡したタブの子にする。aTab.parentTab = aParentと同義。
detachTab(aTab, aKeepChildTabs) メソッド aTabとして渡したタブを、現在関連付けられている親タブから開放する。例えば、A(親)・B(Aの子)・C(Bの子)の三つのタブからなるグループからBを開放する場合は、第二引数がtrueの場合はBとCの二つを親子関係を維持したまま、falseの場合はBのみを、グループから開放する。detachTab(aTab, true)はaTab.parentTab = nullと同義。
removeAllTabs() メソッド 現在のタブも含め、全てのタブを閉じる。最後のタブを閉じた後の挙動はユーザーの設定に依存。返り値はなし。
removeLeftTabsFrom(aTab), removeRightTabsFrom(aTab) メソッド 指定したタブより左(右)のタブを全て閉じる。返り値は渡したタブ。
undoRemoveTab() メソッド 最後に閉じたタブを開き直す。返り値は開き直したタブ。
moveTabTo(aTab, aIndex) メソッド 指定したタブを絶対指定で移動する。例えば、0を指定すると一番左に移動する。移動先が存在しない場合は、端に移動する。返り値は移動したタブ。
moveTabBy(aTab, aOrder) メソッド 指定したタブを相対指定で移動する。例えば、-2を指定すると二つ左に移動する。移動先が存在しない場合は、端に移動する。返り値は移動したタブ。
moveTabLeft(aTab), moveTabRight(aTab) メソッド 指定したタブを一つ左(右)に移動する。端にあるタブに対して使用すると、反対側の端に移動する。
removeTabGroup(aTab) メソッド 指定したタブを親とするタブグループをまとめて閉じる(親や兄弟のタブは閉じない)。タブグループモードが無効な場合はremoveTab()と同じ動作。返り値はなし。
editBookmarkFromTab(aTab) メソッド 指定したタブで開いているページがブックマークされている場合、ブックマークのプロパティを開く。ブックマークされていない場合は何もしない。返り値は渡したタブ。
duplicateTab(aTab) メソッド 指定したタブを同じウィンドウで複製する。返り値は新しく開かれたタブ。
duplicateTabInWindow(aTab) メソッド 指定したタブと同じ内容のタブを新しいウィンドウで開く。返り値は渡したタブ。
sortTabsByGroup() メソッド 全てのタブを、グループ順で並べ替える。タブグループモードが無効な場合は何もしない。
setTabColorFor(aTab, aColorSet) メソッド 指定したタブのラベルの色を変える。タブグループモードが有効な場合、子孫のタブのラベルの色も変える。色の指定は以下の書式で行う。
#RRGGBB:#RRGGBB
直接指定。前半は背景、後半は文字の色。文字の色を省略すると、自動指定になる。
auto
自動指定。背景も文字もランダムに色を付ける。
default
ラベルの色をデフォルトに戻す。
getTabInfo(aTab) メソッド タブのラベル・ヒストリなどの情報を抽出したオブジェクト([object XULTabbrowserTabInfo])を返す。
addTabWithTabInfo(aTabInfo) メソッド getTabInfo()で得たオブジェクトから、元のタブと同じ状態のタブを開く(元のタブを複製する)。返り値は新しく開いたタブ。

自作XULアプリに以下のようなコードを組み込めば、タブブラウザ拡張を導入している環境と未導入の環境とで処理を振り分けられます。


// 例:タブセットをまとめてダウンロードする機能の場合
//     タブブラウザ拡張がある場合は現在のグループを、
//     未導入状態では全てのタブをダウンロードする

var tabs = ('TabbrowserService' in window) ? gBrowser.selectedTab.ownerGroup : [] ;
if (!tabs.length) tabs = gBrowser.mTabContainer.childNodes;

for (var i = 0; i < tabs.length; i++) {
	saveDocument(gBrowser.getBrowserForTab(tabs[i]).contentDocument);
}
		

また、マウスジェスチャなどにTBEの機能を割り付けるためにも利用できます。

gBrowser.undoRemoveTab(); // 「タブを閉じるを」やり直す

Extra Events 拡張されるイベント (2004-08-28)

TBE導入後は、tabbrowser要素が状況に応じて以下のイベントを発行します。これらのイベントは、タブ関連の機能を動作させるトリガーとして利用できます。

イベント名 発行されるタイミング 拡張されたプロパティ
XULTabbrowserTabAdded タブが開かれた時
tabId
新しく開かれたタブのtabId
tabURI
タブで開いたページのURI(文字列)
referrerURI
リファラ(nsIURI)
XULTabbrowserAddTabCanceled タブを開く動作がタブの最大数の制限によってキャンセルされた時
loadingURI
タブで開こうとしたURI(文字列)
referrerURI
リファラ(nsIURI)
tabInfo
新しく開こうとしたタブの状態指定(オブジェクト)
XULTabbrowserTabRemoved タブが閉じられた時
tabId
削除されたタブのtabId(文字列)
tabIndex
削除されたタブの位置(整数値)
XULTabbrowserTabLoading タブの読み込みが進行している時
tabId
読み込みが進行しているタブのtabId(文字列)
tabURI
タブで読み込んでいるページのURI(文字列)
loadingView
読み込みが進行しているフレーム(Window)
XULTabbrowserTabLoad タブの読み込みが完了した時
tabId
読み込みが完了したタブのtabId(文字列)
tabURI
タブで読み込んだページのURI(文字列)
loadedView
読み込みが完了したフレーム(Window)
XULTabbrowserTabLocationChange タブで読み込んでいるページのURIが変わった時
tabId
読み込みが進行しているタブのtabId(文字列)
oldLocation
前に表示していたページのURI(文字列)
newLocation
新しく読み込みを始めたページのURI(文字列)
XULTabbrowserUndoCacheAdded タブのアンドゥキャッシュにエントリが追加された時
cachedTabInfo
キャッシュされたタブの情報(XULTabbrowserTabInfoオブジェクト)
XULTabbrowserUndoCacheOverFlowed タブのアンドゥキャッシュがいっぱいになり、一番古いエントリが自動的に削除された時
overFlowedCachedTabInfo
削除されたキャッシュ(XULTabbrowserTabInfoオブジェクト)
XULTabbrowserUndoCacheRemoved タブのアンドゥキャッシュからエントリが削除された時
removedCachedTabInfo
削除されたキャッシュ(XULTabbrowserTabInfoオブジェクト)
XULTabbrowserTabStatusChange タブのロックや機能の許可などの状態が変化した時
tabId
状態が変化したタブのtabId(文字列)
targetStatus
変化したステータス(文字列)
targetURI
ステータスを変化させた対象のページのURI(全てのページに対してステータスを変更する場合は"ANY"がセットされる)(文字列)
XULTabbrowserTabMoved タブの位置が変わった時(並べ替えられた時)
tabId
位置が変わったタブのtabId(文字列)
oldTabIndex
元の位置(整数値)
newTabIndex
新しい位置(整数値)
XULTabbrowserURIDrop タブバーにURI文字列がドロップされた時
droppedURI
ドロップされたURI(文字列)
XULTabbrowserTabDrop タブバーにタブがドロップされた時
tabURI
ドロップされたタブのページのURI(文字列)
droppedTabId
ドロップされたタブのtabId(文字列)
targetTabId
ドロップした先の位置のタブのtabId(文字列)
droppedPosition
ドロップした位置(整数値のフラグ。タブの前:tabbrowser.DROP_BEFORE, タブの後:tabbrowser.DROP_AFTER, タブの上:tabbrowser.DROP_ON)
dragdropShiftKey
dragdropイベントのshiftKeyの値
dragdropAltKey
dragdropイベントのaltKeyの値
dragdropMetaKey
dragdropイベントのmetaKeyの値
dragdropCtrlKey
dragdropイベントのctrlKeyの値
dragdropTarget
dragdropイベントのtarget
dragdropOriginalTarget
dragdropイベントのoriginalTarget
TabbrowserTabGroupModified タブグループに変化があった時
tabId
グループが変化したタブのtabId(文字列)

自作XULアプリに以下のようなコードを組み込めば、タブブラウザ拡張を導入している環境で特別な処理を行えます。


// 例:タブで開いた内容がムービーだった場合に自動でタブを閉じる

function onTabLoad(aEvent) {
   if (aEvent.tabURI.match(/\.(rm|ram|avi|mov|wmv|asf)$/i)) {
      var tabbrowser = aEvent.target;
      var tab        = tabbrowser.getTabByTabId(aEvent.tabId);
      tabbrowser.removeTab(tab);
   }
}

window.addEventListener('XULTabbrowserTabLoad', onTabLoad, true);
Last modified:2013/03/27 04:34:46