3

メッセージのコンテンツをディスクに保存できるThunderbird(11)プラグインを開発しました。現在、この拡張機能を拡張して、メッセージを閉じたときにメッセージを自動処理できるようにしています。多くの問題が発生します。

「タブを閉じる」イベントにフックする方法が見つかりません。また、現在開いているタブのメッセージURIを取得するのに問題があります(現在、クリックイベントとキーボードイベントをキャッチしようとしています)。この情報は、タブコンテナのDOMでは利用できないようです。

メールメッセージのタブまたはウィンドウが閉じたことを一般的な方法で検出し、閉じたメールメッセージのURIを取得してさらに処理する方法はありますか?

タブコンテナのドキュメントを見て、NsIWindowMediatorさまざまなイベントリスナーを試しましたが、これまでのところうまくいきません。

編集:最近閉じたタブリストを使用していくつかの結果を取得しています。あまり洗練されたソリューションではありませんが、少なくともタブへの参照があります。これで、タブ内に含まれていたメッセージへのURIを取得するだけで済みます。

4

2 に答える 2

4

「タブを閉じる」イベントにフックする方法が見つかりません。

不適切に文書化された)<tabmail>要素を使用すると、タブモニターを登録できます。このようなものが機能するはずです:

var tabmail = document.getElementById("tabmail");
var monitor = {
  onTabClosing: function(tab)
  {
    ...
  }
};
tabmail.registerTabMonitor(monitor);

また、現在開いているタブのメッセージURIを取得するのに問題があります

この<tabmail>要素にはtabInfo、現在開いているタブに関する情報を含むプロパティがあります。おそらく、が存在するタブのみを確認する必要がありますmode.name(または"message"など、他のモードも多数あります)。このモードにはメソッドがあるため、次のように実行する必要があります。"folder""contentTab"getBrowser()

var tabmail = document.getElementById("tabmail");
for (var i = 0; i < tabmail.tabInfo.length; i++)
{
  var tab = tabmail.tabInfo[i];
  if (tab.mode.name == "message")
    alert(tab.mode.getBrowser().currentURI.spec);
}

編集:Peterがコメントで指摘しているように、メッセージのURIを取得するアプローチは、現在読み込まれているメッセージでのみ機能します。すべてのタブは、メールメッセージに同じブラウザ要素を再利用します。URIを適切に取得することはより複雑です。メッセージのnsIMsgDBHdrインスタンスTabInfo.folderDisplay.selectedMessageを経由して取得し、それを使用nsIMsgFolder.getUriForMsg()してURIを作成する必要があります。

var tabmail = document.getElementById("tabmail");
for (var i = 0; i < tabmail.tabInfo.length; i++)
{
  var tab = tabmail.tabInfo[i];
  if (tab.mode.name != "message")
    continue;
  var message = tab.folderDisplay.selectedMessage;
  alert(message.folder.getUriForMsg(message));
}
于 2012-04-06T20:00:50.263 に答える
0

質問の2番目の部分について:

次のサンプルコードは、開いているすべてのタブのmsgDBHdrオブジェクトを提供します。カレンダータブのメッセージにアクセスしないように、タイプをチェックする必要があります。):

tabInfos = window.document.getElementById("tabmail").tabInfo;
for (i = 0; i < tabInfos.length; i++) {      
  msgHdr = tabInfos[i].folderDisplay.selectedMessage;
  alert(
    msgHdr.mime2DecodedSubject+"\n"
   +msgHdr.messageId+"\n"
   +"in view type "+tabInfos[i].mode.type
  );
}

tabinfoエントリには、さらに興味深い情報がいくつかあります。ErrorConsoleを開いて実行するだけです

top.opener.window.document.getElementById("tabmail").tabInfo[0].toSource()

よく読んでください。

于 2014-07-21T12:57:35.717 に答える