我正在尝试使用我的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;
}
所以我正在寻找的是一个在关闭选项卡后调用的事件,或者是一种获取已关闭的选项卡索引的方法,以便我可以在迭代浏览器时跳过它。
任何人都知道我的问题是否有任何此类事件或其他解决方案?
提前致谢!
答案 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]);
...