我正在寻找能够在浏览器中点击(更改)标签后运行一些代码的event,但我还没找到。
是否有可能以某种方式实现此事件?
我已经在监听DOMContentLoaded
事件,我正在状态栏上显示有关当前页面的一些信息。当我更改选项卡时,状态栏中的信息不正确(我必须重新加载页面)。
谢谢
答案 0 :(得分:5)
有两种方法可以做到这一点。
nsIWebProgressListener界面用于检测窗口位置何时发生变化。在窗口的onLoad
处理程序中放置这样的内容:
// implements nsIWebProgressListener
var listener = {
onLocationChange: function(aProgress, aRequest, aURI) {
// fires on tab change; update status here;
// get the currently selected tab
var currDoc = gBrowser.contentDocument;
},
onStateChange: function(a, b, c, d) {},
onProgressChange: function(a, b, c, d, e, f) {},
onStatusChange: function(a, b, c, d) {},
onSecurityChange: function(a, b, c) {}
}
gBrowser.addProgressListener(
listener,
Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);
请注意,每次窗口位置发生变化时,onLocationChange
都会触发。这意味着它会在浏览器启动,当前选项卡中加载新URL,选项卡更改等时触发。如果您的目标是根据当前加载状态更新状态栏,这可能就是您想要的。 URL。
要仅检测选择新标签的情况,请使用TabSelect
事件。完整示例copied from here:
function exampleTabSelected(event) {
var browser = gBrowser.selectedBrowser;
// browser is the XUL element of the browser that's just been selected
}
// During initialisation
var container = gBrowser.tabContainer;
container.addEventListener("TabSelect", exampleTabSelected, false);
// When no longer needed
container.removeEventListener("TabSelect", exampleTabSelected, false);