window.onbeforeunload侦听器在Firefox中的tab关闭时没有触发

时间:2015-05-21 23:15:00

标签: javascript html5 google-chrome firefox local-storage

问题

我有一个应该在window.onbeforeunload上运行的函数。在Chrome中,这可以正常工作,并在关闭或刷新选项卡或窗口时运行。但是,在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这是关闭窗口时似乎无法在Firefox中运行的部分。
  3. 在localStorage中更改后,更新DOM以显示时间戳
  4. 演示

    以下是示例的代码:http://codepen.io/jakelauer/full/NqRyqQ/

    要测试它,请在两个不同的窗口或标签中打开链接。您应该注意到,当刷新任一选项卡时,两个选项卡都会更新以显示相同的时间戳。在Chrome中,您会注意到如果您关闭一个标签页,另一个标签页将更新其时间戳。在Firefox中,您会注意到时间戳未更新

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

1 个答案:

答案 0 :(得分:0)

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