Thunderbird 3のタブあれこれ
でThunderbird3のアドオン作ることで知ったことをメモするよ。
Webページをタブに開きたかったら
var url = "http://example.com" var tabmail = document.getElementById("tabmail"); tabmail.openTab("contentTab", { contentPage: url });
でOK
tabmail.openTab
メソッドの第一引数はタブのタイプを指定するんだけど、これ、タイプ別に10個までしか開けないみたい。まぁThunderbirdでそこまでタブを開くことは無いだろうからいいけど。
んで、第二引数はページ情報としてオブジェクトを渡すようになっている。最低限、contentPageがあればタブに開けるが、上記ページの追記で書いたようにリンクをクリックすると外部ブラウザにURLを渡されてしまう。
調べていくと、chrome://messenger/content/specialTabs.js
でbrowser要素にonclick
イベントハンドラをくっつけていて、openTab
メソッド第二引数のオブジェクトにclickHandlerがあればそれを、なければデフォルトのハンドラを付けている事が分かる。
さらに見ていくと、タブのタイプにchromeTab
を指定したとき、contentTab
を指定したときと、どこにも使われていないと思われるspecialTabs.siteClickHandler
メソッドがある。このメソッドは第一引数にEventオブジェクト、第二引数にRegExpオブジェクトを取っている。デフォルトの設定に加えて、この正規表現にマッチしなかったら外部ブラウザに投げる形になっている。この正規表現を/.*/
等としておけば全URLをThunderbird内で表示することが可能。
まとめておくと
var url = "http://example.com" var tabmail = document.getElementById("tabmail"); tabmail.openTab("contentTab", { contentPage: url, clickHandler: function(event){ specialTabs.siteClickHandler(event, /.*/); } });
これだとさすがにヤバイので、同一ドメイン限定に絞ると以下のような感じ。
var url = "http://example.com" var tabmail = document.getElementById("tabmail"); var uri = makeURI(url); var reg = new RegExp("^" + uril.prePath.replace(/\./g, "\\.") + "($|/)"); tabmail.openTab("contentTab", { contentPage: url, clickHandler: function(event){ specialTabs.siteClickHandler(event, reg); } });
因みに、Thunderbird内にはopenLinkExternally(urlString)
メソッドが用意されている。外部のデフォルトブラウザにURLを投げるメソッドだ。これも何かに使えそうな感じ。