求助:怎么判断页面是关闭还是刷新

时间:2022-09-24 19:15:55
想用JS来判断,浏览器是关闭还是刷新,要兼容火狐,IE,chrome 主流的那几个浏览器都得兼容。

function CloseWindows(evt){
        var isIE=document.all?true:false;
        evt = evt ? evt :(window.event ? window.event : null);
        if(isIE){//IE浏览器
            if(evt.clientY<0 || evt.altKey){
                event.returnValue = Language_Lab_Index_LeaveWithoutSave;
            }
        }
        else{
                return Language_Lab_Index_LeaveWithoutSave;
        }
    }

在body中通过加入onbeforeunload="return CloseWindows(event)"。可以监听到上述浏览器的各种关闭离开页面的操作。但是很纠结的是这样写,在除了IE以外的浏览器 都没法判断是刷新还是关闭。求个大神指点下,其他的应该怎么写。谢谢了。

14 个解决方案

#1


提供个思路也好啊 各位,很纠结啊~~ 客户这要求真把我难倒了... 试了很多种方法都没解决

#2


无解,ie可以获取到clientX当鼠标不在body,firefox这种获取不到,所以无法判断

#3


将窗口引用存入一个变量,在窗口被关闭或刷新后通过这个变量来判断窗口的状态
前提是用户没有关闭所有的窗口。

#4


用了一个比较笨的方法

var IsRefresh=false;
    document.onkeydown=function(event){
        if(event.keyCode==116)//键盘刷新 F5
        {
            IsRefresh=true;
        }    
    }

然后判断IsRefresh的值,这样可以监听到F5刷新事件,但是通过右键的刷新没法捕捉捕捉...

#5


引用 3 楼 xodbc 的回复:
将窗口引用存入一个变量,在窗口被关闭或刷新后通过这个变量来判断窗口的状态
前提是用户没有关闭所有的窗口。


不行啊,用户那边那时候跟我说的是,不管关选项卡还是关浏览器,不管怎么关都要响应...也就是说关闭所有窗口也是其中一种状况。

#6


我用过一个近似判断刷新的方法:
在beforeunload事件中用cookie记录当前时间,
在页面的开始部分添加js读取cookie中的时间,并与当前时间比较,如果差值小于一定值(比如5秒)就认为用户的操作是刷新。

这只是近似判断,满足一般情况,可能存在极限情况下判断错误

#7


引用 6 楼 dencey 的回复:
我用过一个近似判断刷新的方法:
在beforeunload事件中用cookie记录当前时间,
在页面的开始部分添加js读取cookie中的时间,并与当前时间比较,如果差值小于一定值(比如5秒)就认为用户的操作是刷新。

这只是近似判断,满足一般情况,可能存在极限情况下判断错误


这方法不行啊,这是卸载掉当前页面,并从服务器端重新加载最新页面后,才能判断是刷新。但是我这边需要在当前页面卸载之前就要判断出是不是刷新了。 

#8


引用 7 楼 lmt5408 的回复:
引用 6 楼 dencey 的回复:我用过一个近似判断刷新的方法:
在beforeunload事件中用cookie记录当前时间,
在页面的开始部分添加js读取cookie中的时间,并与当前时间比较,如果差值小于一定值(比如5秒)就认为用户的操作是刷新。

这只是近似判断,满足一般情况,可能存在极限情况下判断错误

这方法不行啊,这是卸载掉当前页面,并从服务器端……

一个方法:控制客户端浏览器的刷新行为(屏蔽按钮、热键、菜单等等刷新途径),并提供刷新按钮给用户点。
另一个方法:从服务器端判断用户请求的url是否和其当前url相同(除去随机变化的参数),如果相同则直接返回退回上一页的js脚本。

#9


其实这个好像还真没有一个好的办法,你屏蔽了键盘的快捷键,用户可以用右键菜单,你屏蔽了右键菜单,用户还可以用地址栏里面的刷新。

#10


引用 7 楼 lmt5408 的回复:
引用 6 楼 dencey 的回复:我用过一个近似判断刷新的方法:
在beforeunload事件中用cookie记录当前时间,
在页面的开始部分添加js读取cookie中的时间,并与当前时间比较,如果差值小于一定值(比如5秒)就认为用户的操作是刷新。

这只是近似判断,满足一般情况,可能存在极限情况下判断错误

这方法不行啊,这是卸载掉当前页面,并从服务器端……


你的要求好像是没办法实现,看来只能改需求了

#11


引用 4 楼 lmt5408 的回复:
用了一个比较笨的方法

var IsRefresh=false;
    document.onkeydown=function(event){
        if(event.keyCode==116)//键盘刷新 F5
        {
            IsRefresh=true;
        }    
    }

然后判断I……


刷新之后 IsRefresh的值又是false了....这种显然不行

#12


这确实是个难题,
等大牛出现,
咱也学习学习

#13


我也遇到这样的问题,不知道怎么解决呀。

#14


求js判断页面刷新的方法

#1


提供个思路也好啊 各位,很纠结啊~~ 客户这要求真把我难倒了... 试了很多种方法都没解决

#2


无解,ie可以获取到clientX当鼠标不在body,firefox这种获取不到,所以无法判断

#3


将窗口引用存入一个变量,在窗口被关闭或刷新后通过这个变量来判断窗口的状态
前提是用户没有关闭所有的窗口。

#4


用了一个比较笨的方法

var IsRefresh=false;
    document.onkeydown=function(event){
        if(event.keyCode==116)//键盘刷新 F5
        {
            IsRefresh=true;
        }    
    }

然后判断IsRefresh的值,这样可以监听到F5刷新事件,但是通过右键的刷新没法捕捉捕捉...

#5


引用 3 楼 xodbc 的回复:
将窗口引用存入一个变量,在窗口被关闭或刷新后通过这个变量来判断窗口的状态
前提是用户没有关闭所有的窗口。


不行啊,用户那边那时候跟我说的是,不管关选项卡还是关浏览器,不管怎么关都要响应...也就是说关闭所有窗口也是其中一种状况。

#6


我用过一个近似判断刷新的方法:
在beforeunload事件中用cookie记录当前时间,
在页面的开始部分添加js读取cookie中的时间,并与当前时间比较,如果差值小于一定值(比如5秒)就认为用户的操作是刷新。

这只是近似判断,满足一般情况,可能存在极限情况下判断错误

#7


引用 6 楼 dencey 的回复:
我用过一个近似判断刷新的方法:
在beforeunload事件中用cookie记录当前时间,
在页面的开始部分添加js读取cookie中的时间,并与当前时间比较,如果差值小于一定值(比如5秒)就认为用户的操作是刷新。

这只是近似判断,满足一般情况,可能存在极限情况下判断错误


这方法不行啊,这是卸载掉当前页面,并从服务器端重新加载最新页面后,才能判断是刷新。但是我这边需要在当前页面卸载之前就要判断出是不是刷新了。 

#8


引用 7 楼 lmt5408 的回复:
引用 6 楼 dencey 的回复:我用过一个近似判断刷新的方法:
在beforeunload事件中用cookie记录当前时间,
在页面的开始部分添加js读取cookie中的时间,并与当前时间比较,如果差值小于一定值(比如5秒)就认为用户的操作是刷新。

这只是近似判断,满足一般情况,可能存在极限情况下判断错误

这方法不行啊,这是卸载掉当前页面,并从服务器端……

一个方法:控制客户端浏览器的刷新行为(屏蔽按钮、热键、菜单等等刷新途径),并提供刷新按钮给用户点。
另一个方法:从服务器端判断用户请求的url是否和其当前url相同(除去随机变化的参数),如果相同则直接返回退回上一页的js脚本。

#9


其实这个好像还真没有一个好的办法,你屏蔽了键盘的快捷键,用户可以用右键菜单,你屏蔽了右键菜单,用户还可以用地址栏里面的刷新。

#10


引用 7 楼 lmt5408 的回复:
引用 6 楼 dencey 的回复:我用过一个近似判断刷新的方法:
在beforeunload事件中用cookie记录当前时间,
在页面的开始部分添加js读取cookie中的时间,并与当前时间比较,如果差值小于一定值(比如5秒)就认为用户的操作是刷新。

这只是近似判断,满足一般情况,可能存在极限情况下判断错误

这方法不行啊,这是卸载掉当前页面,并从服务器端……


你的要求好像是没办法实现,看来只能改需求了

#11


引用 4 楼 lmt5408 的回复:
用了一个比较笨的方法

var IsRefresh=false;
    document.onkeydown=function(event){
        if(event.keyCode==116)//键盘刷新 F5
        {
            IsRefresh=true;
        }    
    }

然后判断I……


刷新之后 IsRefresh的值又是false了....这种显然不行

#12


这确实是个难题,
等大牛出现,
咱也学习学习

#13


我也遇到这样的问题,不知道怎么解决呀。

#14


求js判断页面刷新的方法