結論としては、以下のようになります。
chrome.windows.getCurrent(function(currentWindow){
chrome.tabs.getSelected(currentWindow.id, function(selectedTab){
:
:
})
});
chrome.tabs モジュールにはもっとシンプルな getCurrent() 関数があります。
しかし、ドキュメントに
May be undefined if called from a non-tab context (for example: a background page or popup view).との記載がある通り、ポップアップタイプのChrome Extensionsで使用しても現在のタブが取得できません。そこで
- chrome.windows.getCurrent() 関数で選択されているWindowのIDを取得する
- WindowのIDを指定してchrome.tabs.getSelected() 関数で選択中のタブを取得する
JavaScript初心者に分かり難いのは、getCurrent()/getSelected() 関数がともに、WindowやTabを受け取るコールバック関数を引数にとるという点です。たとえば、getSelected() であれば以下のような形です。
chrome.tabs.getSelected(integer windowId, function callback)
callback ---> function(Tab tab) {...};
そのコールバック関数を無名関数でカスケードさせたのがこの記事の最初のスニペットです。ところでドキュメントを読めば、chrome.tabs.getSelected()の第一引数WindowIDはOptionalでDefaultはCurrentWindowとなっています。そのため以下のように、第一引数にnullを指定することで、コールバック関数のカスケードを回避するが可能です。
chrome.tabs.getSelected(null, function(selectedTab){
:
:
});
とはいえ、JavaSccriptで省略可能な引数を引数リストの末尾に持ってこないのは、ちょっとマナー違反です。明示的にnullを渡さないといけないのですが、これではもう省略可能ではありません。また後でコードを読んだ時に、null が何を表すかわからなくなりそうです。
0 件のコメント:
コメントを投稿