window.onbeforeunload 在 Firefox 中关闭选项卡时不触发侦听器

window.onbeforeunload listener not triggering on tab close in Firefox

问题

我有一个函数应该在 window.onbeforeunload 上 运行。在 Chrome 中,只要关闭或刷新选项卡或 window,它就可以正常工作并且 运行s。然而,在 Firefox 中,它只会 运行 刷新,而不是关闭。

代码

这是一个例子:

var onStorageUpdate = function(){
    var lastUnloaded = localStorage.getItem("LastUnloaded");
    if(lastUnloaded === null){
        $("div").text("Never stored");
    }
    else{
        $("div").text(lastUnloaded);
    }
};

onStorageUpdate();

window.addEventListener("beforeunload", function(){
    var now = Date.now();
    localStorage.setItem("LastUnloaded", now);
});

window.addEventListener("storage", function(){
    onStorageUpdate();
});

以上代码中应该的事件顺序如下:

  1. 在初始页面加载时,尝试从 localStorage 获取 LastUnloaded。如果没有检索到任何内容,则显示 "Never Stored",否则显示存储的值(应该是一个长整型时间戳)
  2. 卸载选项卡后,LastUnloaded 更新为当前时间戳。 这是在关闭 window 时在 Firefox 中似乎不起作用的部分。
  3. 更改 localStorage 后,更新 DOM 以显示时间戳

演示

这是示例的代码笔:http://codepen.io/jakelauer/full/NqRyqQ/

为了测试它,在两个不同的 windows 或选项卡中打开 link。您应该注意到,当您刷新任一选项卡时,两个选项卡都会更新以显示相同的时间戳。在 Chrome 中,您会注意到如果关闭一个选项卡,另一个选项卡将更新其时间戳。在 Firefox 中,您会注意到时间戳 不会更新 .

有什么想法吗?提前致谢!

我最后只使用了 onunload,它在任何地方都运行良好。