Обнаружение закрытой вкладки (после закрытия) из расширения Firefox - PullRequest
1 голос
/ 05 марта 2012

Я пытаюсь получить расширение 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 голосов
/ 06 марта 2012

Вот что я сделал, чтобы решить проблему:

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]);
    ...
0 голосов
/ 06 марта 2012

Специального события для этого нет - вы просто перехватываете обычное событие и задерживаете обновление списка вкладок.Что-то вроде этого:

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

Менее универсальным подходом было бы немедленное обновление списка, но исключая закрытую вкладку.

...