【发布时间】:2014-04-18 16:46:52
【问题描述】:
我在一个插件上工作,它观察所有的 http 请求并填充与每个选项卡对应的一些信息。我想清除我关闭的选项卡的数据。但是,我无法以更清洁/更明智的方式识别标签关闭事件。
所以我有发出请求的contentWindow (LoadContext -> associatedWindow),以及那个内容窗口(用于选项卡)的browser。
- 我意识到要执行
browser.addEventListener,我将不得不监听DOMNodeRemoved事件——即deprecated as per MDN(并且应该使用突变观察者)。此外,当弹出窗口关闭时,我不会收到事件。 - 如果我执行
contentWindow.addEventListener并查找unload事件,结果是非常不可预测的。有时,我根本不了解这些事件。 - 如果我从
gBrowser.tabs获得这个tab元素并监听TabClose事件,我可以获得选项卡的所有关闭事件。但话又说回来,它不会通知任何弹出窗口关闭(尽管我确实得到了弹出窗口的tab元素)
那么了解任何选项卡/弹出窗口关闭的最简单/最干净的方法是什么?顺便说一句,我不使用插件 SDK。
编辑:寻找更简单、适用于所有情况的解决方案。 IE。我收到关闭事件的通知,无论是选项卡还是弹出窗口(或任何其他类型的窗口,如果它们存在!)。我相信这可能是可能的,因为我持有一个包含 DOM 窗口的浏览器元素,并且 DOM 在关闭时被删除(卸载)。
EDIT-2:意识到所有问题都归结于一件事:当最后一个选项卡关闭(即窗口关闭)时,Firefox 没有 TabClose 事件。如果我们被通知在窗口关闭时关闭的选项卡,生活会容易得多。无论如何,我将使用@Noitidart 解决方案的修改版本 - 除了TabClose 侦听器之外,还有一个单独的窗口侦听器。并在其中找到tab 元素并进行清理。叹!
将对此进行更多搜索,看看这是否符合错误/增强的条件。
感谢@Noitidart 和@Blargh 的建议。
【问题讨论】:
-
与 Edit2 相同。仅供参考:当带有标签的新浏览器窗口打开时,不会触发
TabOpen事件。不过问题是,当一个窗口关闭时有多个选项卡会发生什么,我认为这些选项卡中的任何一个都没有TabClose事件吧? -
没错。当窗口关闭时没有
TabClose。我所做的是查找其中的所有选项卡并进行清理。事实上,我为每个选项卡的browser元素有一个 expando 属性,我用它来索引我的缓存数组。如果你真的想要,我可以更新我的答案。 -
是的,请您将其发布为解决方案,而不是在主题问题中进行编辑。感谢智能车队,我在这里学到了很多东西。
-
@Noitidart 我刚刚发布了。
标签: javascript dom firefox-addon xul xpcom