想用JS控制网页卸载确实是一件麻烦的事情。如果用了unload,那么很显然我们无法阻止网页的replace或者reload,因为 unload是在下一个网页到达client的时候被触发的,因此我只能选择用onbeforeunload。
onbeforeunload 被调用的时候,当前的页面尚未被unload,所以我们还能够来得及做一些事情。但是我最近也遇到了一些麻烦:onbeforeunload有时候会莫名 其妙的被执行两次。不管是IE还是FF都会出现这种现象。这是个极为隐蔽的问题,我费了好些力气才揪出了它。
究其原 因,是因为如果我们只剩最后一个标签页,那么关闭该标签页的时候,整个browser也会被关闭掉。如果恰好最后一个tab上跑的一段js中有 onbeforeunload事件的调用,这个onbeforeunload就会执行两次。注意:如果是刷新,则不会存在这个问题,因为browser不 会随之关闭。所以我猜测,浏览器的关闭过程中,当最后一个tab关闭时,onbeforeunload被调用一次,随即整个browser关闭,onbeforeunload 再次被调用。
当然还没有很好的解决方案。目前解决的思路如下:
var hasExecuted=false;
function onBeforeUnloadHandler(event){
if(this.hasExecuted==true){
return;
}
// TO-DO SOMETHING
this.hasExecuted=true;
}
本文探讨了使用JavaScript的onbeforeunload事件处理程序时遇到的一个微妙问题:该事件有时会被触发两次。文章分析了这一现象的原因,并提供了一个简单的解决方案。
8783

被折叠的 条评论
为什么被折叠?



