Javascript window.onbeforeunload侦听器在Firefox中关闭选项卡时未触发
问题 我有一个函数应该在window.onbeforeunload上运行。在Chrome中,它可以正常工作,并在关闭或刷新选项卡或窗口时运行。然而,在Firefox中,它只在刷新时运行,不在关闭时运行 代码 以下是一个例子:Javascript window.onbeforeunload侦听器在Firefox中关闭选项卡时未触发,javascript,html,google-chrome,firefox,local-storage,Javascript,Html,Google Chrome,Firefox,Local Storage,问题 我有一个函数应该在window.onbeforeunload上运行。在Chrome中,它可以正常工作,并在关闭或刷新选项卡或窗口时运行。然而,在Firefox中,它只在刷新时运行,不在关闭时运行 代码 以下是一个例子: var onStorageUpdate = function(){ var lastUnloaded = localStorage.getItem("LastUnloaded"); if(lastUnloaded === null){ $("
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();
});
以下是在上述代码中应该工作的事件顺序:
LastUnload
。如果未检索到任何内容,则显示“从未存储”,否则显示存储的值(应为长整数时间戳)lastdunload
。这是关闭窗口时在Firefox中似乎不起作用的部分有什么想法吗?提前谢谢 我最后只使用了onunload,它在任何地方都能正常工作。不知道为什么有人提出“关闭”请求?这个问题显然与编程有关。根据
beforeunload
事件的意图,它提供了一种提示用户并允许他们取消页面卸载的方法。他们的文档还表明,该活动的标准在浏览器实现方面存在很大差异。因此,对于初学者,您可能应该为此使用unload
事件。我还听说,由于浏览器之间的行为不一致,因此不应依赖于运行的unload
事件。@maurice和您可以使用它来保存页面状态,您不需要用它来提示用户。@epascarello true,但问题是页面状态的保存是在可能取消卸载之前还是之后进行的。如果您正在保存一个键,如lastAttemptedUnload
,则它可能属于卸载之前的处理程序。被称为lastdunloaded
,我认为其目的是捕获页面已卸载的实际事件。@Jake如果刷新未关闭的页面,Firefox中的存储密钥是否已更新?如果是,在另一个选项卡中手动更改存储密钥是否会导致onstorage更新?可能Firefox不支持跨选项卡的事件。