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();
});
以上代码中应该的事件顺序如下:
- 在初始页面加载时,尝试从 localStorage 获取
LastUnloaded
。如果没有检索到任何内容,则显示 "Never Stored",否则显示存储的值(应该是一个长整型时间戳)
- 卸载选项卡后,
LastUnloaded
更新为当前时间戳。 这是在关闭 window 时在 Firefox 中似乎不起作用的部分。
- 更改 localStorage 后,更新 DOM 以显示时间戳
演示
这是示例的代码笔:http://codepen.io/jakelauer/full/NqRyqQ/
为了测试它,在两个不同的 windows 或选项卡中打开 link。您应该注意到,当您刷新任一选项卡时,两个选项卡都会更新以显示相同的时间戳。在 Chrome 中,您会注意到如果关闭一个选项卡,另一个选项卡将更新其时间戳。在 Firefox 中,您会注意到时间戳 不会更新 .
有什么想法吗?提前致谢!
我最后只使用了 onunload,它在任何地方都运行良好。
问题
我有一个函数应该在 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();
});
以上代码中应该的事件顺序如下:
- 在初始页面加载时,尝试从 localStorage 获取
LastUnloaded
。如果没有检索到任何内容,则显示 "Never Stored",否则显示存储的值(应该是一个长整型时间戳) - 卸载选项卡后,
LastUnloaded
更新为当前时间戳。 这是在关闭 window 时在 Firefox 中似乎不起作用的部分。 - 更改 localStorage 后,更新 DOM 以显示时间戳
演示
这是示例的代码笔:http://codepen.io/jakelauer/full/NqRyqQ/
为了测试它,在两个不同的 windows 或选项卡中打开 link。您应该注意到,当您刷新任一选项卡时,两个选项卡都会更新以显示相同的时间戳。在 Chrome 中,您会注意到如果关闭一个选项卡,另一个选项卡将更新其时间戳。在 Firefox 中,您会注意到时间戳 不会更新 .
有什么想法吗?提前致谢!
我最后只使用了 onunload,它在任何地方都运行良好。