Javascript 侦听选项卡打开/关闭并处理现有选项卡

Javascript 侦听选项卡打开/关闭并处理现有选项卡,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,每次新标签打开时,我都会尝试做一些事情,无论是通过firefox启动还是在firefox启动后添加新标签。我一直在遵循以下示例: 所以我有 var container = gBrowser.tabContainer; container.addEventListener("TabOpen", tabAdded, false); container.addEventListener("TabClose", tabClosed, false); function tabAdded(event)

每次新标签打开时,我都会尝试做一些事情,无论是通过firefox启动还是在firefox启动后添加新标签。我一直在遵循以下示例:

所以我有

var container = gBrowser.tabContainer;
container.addEventListener("TabOpen", tabAdded, false);
container.addEventListener("TabClose", tabClosed, false);

function tabAdded(event) {
alert("tabAdded!");
var browser = gBrowser.getBrowserForTab(event.target);
browser.pollingService = new PollingService(createGuid());
browser.pollingService.start();
}
我有一个类似的函数来结束。当标签页实际打开/关闭时,这很好,但我遇到了几个问题

首先,当Firefox打开时,它的初始选项卡已经打开,但是tabAdded事件从未为它触发。类似地,当我关闭firefox时,它不会为这些选项卡触发TabClose

在这种情况下,正确的做法似乎是浏览gBrowser.tabContainer中的所有选项卡,并将“我的服务”添加到其中,并在Firefox关闭时执行类似的操作。不幸的是,我不太确定如何知道Firefox何时关闭(也可能有更好的方法来处理这个问题,但我想不出一个)


其次,当我的初始化脚本运行时,gBrowser.tabContainer有时会被取消初始化;是否有我应该监听的特定事件,以知道何时可以安全地将侦听器添加到tabContainer?

使用加载事件侦听器为窗口提供时间,以便您可以添加选项卡事件侦听器并为现有选项卡创建轮询服务。然后使用卸载事件侦听器进行清理。

但是,加载/卸载事件不是在每次网页更改时触发,而不是在打开时触发吗?我如何区分页面何时更改以及firefox何时实际打开/关闭以了解何时进行初始化/清理?如果在(chrome)窗口中添加普通事件侦听器,它将只看到chrome窗口的加载和卸载事件,因为它们不会从内容窗口中冒出。(如果你真的需要的话,你仍然可以在内容窗口中捕获它们。)啊,这似乎对打开有用,但我在卸载时仍然有问题。我正在连接:window.addEventListener(“beforeunload”,this.handleTabClosing,false);,但handleTabClosing中的警报从未真正触发过;beforeunload是我想在这里收听的事件,对吗?我不确定是否允许您在beforeunload处理程序中发出警报。(在网页中,您将返回一个字符串以请求警报,但我不知道这是否在扩展中起作用。)实际的清理代码将放入卸载处理程序中。啊,太好了,现在我收到了有关窗口打开和关闭的通知。尽管出于某种原因,TabOpen事件实际上并没有触发。Tab Close事件正在触发,但TabOpen似乎没有。