从firefox扩展程序检测选项卡关闭(关闭后)

时间:2012-03-05 19:11:56

标签: javascript-events firefox-addon

我正在尝试使用我的firefox扩展来从浏览器中的所有选项卡创建一个url列表。为了更新列表,我需要知道标签何时关闭。

我尝试过使用

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

但是,在实际关闭选项卡之前会调用此选项,这会导致我更新的选项卡列表仍然包含已关闭的选项卡URL。

我通过迭代所有浏览器来更新选项卡列表,如下所示:

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;
}

所以我正在寻找的是一个在关闭选项卡后调用的事件,或者是一种获取已关闭的选项卡索引的方法,以便我可以在迭代浏览器时跳过它。

任何人都知道我的问题是否有任何此类事件或其他解决方案?

提前致谢!

2 个答案:

答案 0 :(得分: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);
}

不太通用的方法是立即更新列表,但不包括正在关闭的选项卡。

答案 1 :(得分: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]);
    ...