我的要求是:
必须检测浏览器关闭事件,并且不应执行页面刷新。
如果代码仅适用于浏览器关闭,则必须清除localstorage。
我已经尝试使用onbeforeunload,但它正在浏览器关闭事件和页面刷新事件上执行。
因此,我的代码仅适用于不在页面刷新(F5或点击刷新符号)上的浏览器关闭事件。
答案 0 :(得分:6)
您无法区分正在关闭的浏览器与包含正在刷新的页面的窗口/选项卡之间的区别。信息根本无法获得。
对于您的特定用例,听起来您可以使用session storage而不是本地存储。会话存储的 point 是当用户完成页面时它会过期。您可以使用this example尝试:
display("Existing <code>sessionStorage.foo</code>: " + sessionStorage.foo);
sessionStorage.foo = new Date().toISOString();
display("New value set: " + sessionStorage.foo);
对我来说,在Firefox,Chrome和IE9上(大概是IE9 +),刷新并不清除会话存储,但关闭选项卡会。
或者,您可以在卸载页面时从本地存储设置时间戳(来自onbeforeunload
),并且当您将来返回页面时,如果该时间戳已经过时,则清除存储并重新开始。当你离开页面时,这并不能清除商店,但行动就好像你在一段时间后回来时一样。
答案 1 :(得分:0)
当仅关闭浏览器时,不会触发任何事件。最接近的是onbeforeunload事件,当窗口即将卸载其资源时会发出该事件。