JS之onunload、onbeforeunload事件详解
简介
onunload,onbeforeunload都是在刷新或关闭时调⽤,可以在<script>脚本中通过 unload来调⽤。区别在于onbeforeunload在onunload之前执⾏,它还可 以阻⽌onunload的执⾏。
onbeforeunload 是正要去服务器读 取新的页⾯时调⽤,此时还没开始读取;⽽onunload则已经从服务器上读到了需要加载的新的页⾯,在即将替换掉当前页⾯时调⽤。
onunload事件
onunload 事件在⽤户退出页⾯时发⽣。
onunload 发⽣于当⽤户离开页⾯时发⽣的事件(通过点击⼀个连接,提交表单,关闭浏览器窗⼝等等。)
注意: onunload 事件同样触发了页⾯载⼊事件(+ onload 事件)。
语法
直接使⽤在html中:
<body onload="SomeJavaScriptCode">
注:以下 HTML 标签⽀持 onunload :<body>, <frameset>
JavaScript 中:
例⼦:
//JS document
alert("unload is work");
}
浏览器兼容情况
IE浏览器 页⾯跳转、刷新页⾯能执⾏,但关闭浏览器不能执⾏;
firefox 页⾯跳转能执⾏,但刷新页⾯、关闭浏览器不能执⾏;
Safari 刷新页⾯、页⾯跳转,关闭浏览器都会执⾏;
Opera、Chrome任何情况都不执⾏。
如图所⽰:
⼤体⼀句话描述:IE, Firefox, 和 Safari ⽀持 onunload 事件, 但是 Chrome 或者 Opera 不⽀持该事件。
onb e f or e unload事件
onbeforeunload 事件在即将离开当前页⾯(刷新或关闭)时触发。
该事件可⽤于弹出对话框,提⽰⽤户是继续浏览页⾯还是离开当前页⾯。
对话框默认的提⽰信息根据不同的浏览器有所不同,标准的信息类似 "确定要离开此页吗?"。该信息不能删除。
但你可以⾃定义⼀些消息提⽰与标准信息⼀起显⽰在对话框。
注意: 如果你没有在 <body> 元素上指定 onbeforeunload 事件,则需要在 window 对象上添加事件,并使⽤ returnValue 属性创建⾃定义信息(查看以下语法实例)。
语法
html中使⽤:
<element onbeforeunload="myScript">
JavaScript 中:
JavaScript 中, 使⽤ addEventListener() ⽅法:
object.addEventListener("beforeunload", myScript);
注意: Internet Explorer 8 及更早 IE 版本不⽀持 addEventListener() ⽅法。
JS中使⽤例⼦写法⼀:
//JS document
return "onbeforeunload is work";
}
return 的值 为你需要告诉⽤户的提⽰信息如上⾯demo的话浏览器的提⽰是这样(firefox ,Chrome并不⽀持⽂字提醒)。
JS中使⽤例⼦写法⼆:
当前页面脚本发生错误
};
值得注意的是,⽹上流传说 可以通过检查 e.clientX e.clientY 判断 ⽤户是否点击 右上⾓关闭浏览器的,但是实践发现 只有 IE6,IE7,IE8 能获取得到具体数值,其他浏览器均为 undefined。
浏览器兼容情况
IE、Safari 完美⽀持
Firefox、Chrome 不⽀持⽂字提醒信息
Opera 不⽀持
如图所⽰:
IE6,IE7 使⽤ onbeforeunload 遇到的bug
凡是 <a> 标签 都会触发 onbeforeunload事件 包括 href=”javascript:void(0)” 这种。
在IE6,IE7 下⾯ 点击 ⾥⾯的 a 标签,蛋疼的事情就发⽣了。
解决⽅法:给这 a标签的 ⽗级 添加 onclick=function(){return false} 即可,不过添加了这个之后 要确保 ⽗级⾥⾯没有 input type=”checkbox” 的标签,否则会导致其⽆效不可点击。