伪协议触发onbeforeunload
根据MSDN描述,IE的onbeforeunload事件触发条件:
简单点来说就是页面URL发生改变时触发:
* 关闭浏览器窗口
* 点击后退、前进、刷新、主页
* 点击链接到新页面
* 调用超链接的click,document.write,document.open,document.close
* 调用window.close,window.open[_self],winodw.navigate,NavigateAndFind,location.replace,location.reload,新的location.herf,submit表单提交,form.submit
接下来看看JavaScript伪协议触发的onbeforeunload:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <a href="javascript:;">我是a链接javascript:;,点我试试</a> <a href="javascript:void(0);">我是a链接javascript:void(0);,点我试试</a> <a href="#">我是a链接#,点我试试</a> <script type="text/javascript">
//javascript:; 和 javascript:void(0); 都触发了onbeforeunload
window.onbeforeunload = function (e) { e = e || window.event; // 兼容IE8和Firefox 4之前的版本 if (e) { e.returnValue = '关闭提示'; } // Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+ return '关闭提示'; }; </script> </body> </html>
解决方法:
onbeforeunload未被标准化,各浏览器的支持与触发各有差异!
避免在页面使用Javascript:;以及其他伪协议,避免重复触发onbeforeunload