最近项目提了一个新需求,就是在浏览本项目页面的时候,检测当用户关闭当前页面或者所在的浏览器时,会触发一个函数,在上网搜了很多文章,都说使用onbeforeunload,和onbunload函数,我身边的大神也说没问题,但是我写上去了然后关闭页面也不弹出alert也不触发浏览器默认弹框,很郁闷,后来在一位大神的提醒下,才发现问题,但还有个问题想不明白;
先看写的代码:
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="UTF-8">
5 <title>关闭页面弹出</title>
6 </head>
7 <body>
8 <button id="btn">点击</button>
9 <a href="http://www.runoob.com">点击调整到菜鸟教程</a>
10 </body>
11 <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
12 <script type="text/javascript">
13 var btn = document.getElementById('btn');
14 btn.addEventListener('click', function(e){
15 alert('1次')
16 });
17 btn.addEventListener('click', function(e){
18 alert('2次')
19 });
20 window.addEventListener("beforeunload", function(event) {
21 event.returnValue = "我在这写点东西...";
22 });
23 </script>
24 </html>
View Code
在这里面还有别的写法,可以参考
菜鸟教程
onbeforeunload事件
还有
为什么用了onbeforeunload也没用?
,这些问题,经过点击可以使用了。
首先因为浏览器兼容问题,如下:
IE、Safari 完美支持
Firefox、Chrome 不支持文字提醒信息
Opera 不支持
接下来说一些注意事项。
1、如果想在onbeforeunload中ajax提交数据,试试用同步ajax请求。因为有些浏览器实现会在unload时在异步ajax结果返回前停掉线程,这样你的回调就永远调不到;
2、火狐浏览器和谷歌不支持问题弹出框,所以在调用的时候alert是不起作用的;
3、在浏览器中调用其它的一些操作也是不会实现的,比如你关闭页面的同时,重新打开一个新页面,等等;
,然后接下来说一下我的疑惑,,谷歌方面也是可以提示浏览器默认弹出框的
比如
,但是这是在你打开页面进行点击按钮或者打开一个连接,进行操作之后,才会触发,如果只是打开页面,没有进行任何操作的话,谷歌和360浏览器是不会有这个弹出框的(不过里面写的ajax还是会触发),这就让我不理解了,有什么想法,希望各位大神不吝赐教!