伪协议触发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