« Jetpack SDK 0.5 の Unload API | while ループ条件中の in 演算子の不思議な挙動 » |
Jetpack SDK 0.5 の Tabs API
Jetpack SDK 0.5 で追加された Tabs API を使用すると、指定したURLを新しいタブやウィンドウで開いたり、各タブ内に表示されたページのDOMへアクセスしたり、タブの開閉やページの読み込みなどのイベントに対してコールバック処理を追加したりすることが可能です。
Tabs API を使用するには、はじめに require 関数でモジュールをインポートします。
var tabs = require("tabs");
タブを開く
Tabs API の open
メソッドで、指定したURLを新しいタブやウィンドウで開くことが可能です。似た機能を持ったAPIとして、 tab-browser API の addTab
メソッドもありますが、 Tabs API の open メソッドを使用することが推奨されています。
open
メソッドの引数に直接URLを指定した場合、新しいタブへ開くと同時にフォーカスします。
tabs.open("http://www.example.com/");
一方、引数を下記のようなオブジェクト形式とした場合、指定したURLを新しいバックグラウンドのタブで開きます。
tabs.open({
url: "http://www.example.com/",
inBackground: true
});
各タブの情報を取得する・タブ内のページのDOMへアクセスする
Tabs API の activeTab
プロパティによって現在のタブ(Tab オブジェクト)を取得したり、 Tabs API のオブジェクト自体を for ~ in ループで回すことで全ウィンドウ内の全タブ(Tab オブジェクト)を列挙したりすることが可能です。 Tab オブジェクトは、 title
プロパティでタブのタイトルやURLを取得したり、 contentDocument
プロパティでタブ内に表示されたページのDOMへアクセスしたりすることが可能です。
下記は、現在のタブのタイトルとURLを取得し、現在のタブ内に表示されたページのDOMの window.alert メソッドを使って表示させる例です。
var tab = tabs.activeTab;
tab.contentWindow.alert(tab.title + "
" + tab.location);
Tab オブジェクトの面白い機能として、 thumbnail
プロパティでタブ内に表示されたページのサムネイル画像を html:canvas 要素として取得することが可能です。下記は、全ウィンドウ内の全タブについてサムネイル画像を取得して data: URL へ変換し、それらを表示するHTMLを新しいウィンドウで開く例です。
var html = "";
for (var tab in tabs) {
html += '<img src="' + tab.thumbnail.toDataURL() + '"/>';
}
tabs.open({
url: "data:text/html,<html><body>" + html + "</body></html>";,
inNewWindow: true
});
タブを閉じる・移動する
Tab オブジェクトには、タブを閉じる close
、タブを同一ウィンドウ内の別の位置へ移動する move
、タブへフォーカスする activate
などのメソッドもあります。下記は、現在のタブを閉じる例です。
tabs.activeTab.close();
タブ関連イベントへのコールバック処理
onOpen(タブを開いたとき), onClose(タブを閉じたとき), onActivate(アクティブなタブが変化したとき), onReady(タブ内のページのDOMツリー構築時 = DOMContentLoaded イベント発生時), onPaint(タブ内のページで再描画発生時 = MozAfterPaint イベント発生時)などに対してコールバック処理を追加することができます。下記は、タブ内のページのDOMツリー構築完了時に、そのページのURLをコンソールへ表示する例です。
tabs.onReady = function(tab) {
console.log("onReady: " + tab.location.href);
};