在Tab切换事件上

xra*_*alf 4 events firefox-addon

我正在寻找一个能够在浏览器中单击(更改)选项卡后运行一些代码的事件,但我还没有找到它.

是否有可能以某种方式实现这一事件?

我已经在听DOMContentLoaded事件,我在状态栏上显示有关当前页面的一些信息.当我更改选项卡时,状态栏中的信息不正确(我必须重新加载页面).

谢谢

Way*_*ett 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);
Run Code Online (Sandbox Code Playgroud)

请注意,onLocationChange每次窗口位置发生变化时都会触发.这意味着它会在浏览器启动,当前选项卡中加载新URL,选项卡更改等时触发.如果您的目标是根据当前加载状态更新状态栏,这可能就是您想要的. URL.

检测标签更改

要仅检测选择新选项卡的情况,请使用该TabSelect事件.从这里复制的完整示例:

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);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,onLocationChange在加载新页面时会在早期触发,因此您仍然需要DOMContentLoaded事件来处理这些情况. (2认同)