2012-03-05 22 views
1

Firefoxの拡張機能を使って、ブラウザのすべてのタブからURLリストを作成しようとしています。リストを更新したままにするには、タブが閉じられたことを知る必要があります。ファイアウォール拡張子から閉じた(閉じた後に)

私はタブが実際に閉じられる前に

window.addEventListener("TabClose", tabRemoved, false); 

はしかし、これはまだ閉じたタブのURLを含む私の更新tablist、その結果、呼び出されます使用してみました。

私はそうのように、すべてのブラウザを繰り返すことによって、タブのリストを更新:

function() 
{ 
    gBrowser = window.getBrowser(); 
    tabs = gBrowser.browsers; 
    urls = []; 

    for (var i = 0; i < tabs.length; i++) 
    { 
     if (typeof(tabs[i]) != "undefined") { 
      urls.push(tabs[i].webNavigation.currentURI.spec); 
     } 
    } 

    return urls; 
} 

だから私が探しているタブが閉じられた後に呼び出されるイベント、または取得する方法ですブラウザを反復している間にスキップできるように、閉じられたタブのインデックス。

誰かがこのようなイベントや私の問題に対する他の解決方法を知っていますか?

ありがとうございます!

答えて

0

特別イベントはありません。通常のイベントをキャッチし、遅延したタブリストを更新するだけです。これらの行に沿ったもの:

var tabRemoveTimeout = null; 
window.addEventListener("TabClose", tabRemoved, false); 

function tabRemoved(event) 
{ 
    // If we already scheduled an async action - cancel it 
    if (tabRemoveTimeout) 
    window.clearTimeout(tabRemoveTimeout); 

    tabRemoveTimeout = window.setTimeout(function() 
    { 
    tabRemoveTimeout = null; 
    updateTabList(); 
    }, 0); 
} 

より一般的でないアプローチは、リストをすぐに更新することですが、閉じているタブは除きます。ここで

+0

それはタブを閉じるのにかかる時間は定数ので、非常に信頼性がないではありませんので、私は遅れ溶液で本当に満足していません。 閉じたタブを除外してすぐにタブリストを更新することは、これを進める方法です。 – Martin

0

は、私は問題を解決するためにやったことです:

tabRemoved = function (ev) 
{ 
    logTabs([ev.target._tPos]); /* ev.target._tPos = index of tab that was closed */ 
} 

logTabs = function (excludelist) 
{ 
    ... 
    urls = getTabURLs(); 
    for(var i = 0; i < urls.length; i++) 
    { 
     if(typeof(excludelist) != "undefined" && excludelist.indexOf(i) != -1) 
      continue; 

     doStuff(urls[i]); 
    ... 
関連する問題