2

当浏览器关闭时,我已经实现了一些功能。

window.onbeforeunload = function (evt) {

    evt = (evt)? evt:event;
    clickY = evt.clientY;
    altKey = evt.altKey; 
    keyCode = evt.keyCode; 

if (altKey == true && keyCode == 0){ 
            //Make call to the server to clear the cache                   
    }else if(clickY < 0){
     //Make a call to the server to clear the cache
    }else {
        return;
    }             
};

现在,上面代码中的问题是,当我通过单击地址栏按 Enter 或使用刷新按钮刷新页面时,我的代码给了我警报(“21112”),这是我不想要的,因为调用只会触发如果浏览器关闭。所以有人可以帮助我实现这一目标。

4

3 回答 3

8

window.onbeforeunload事件是在您的页面被unload编辑之前调用。没有方法可以检查它是刷新还是浏览器窗口关闭事件。

它由不同的场景触发MSDN

  • 关闭当前窗口。
  • 通过输入新地址或选择收藏夹导航到另一个位置。
  • 单击引用另一个文档的锚点。
  • 调用anchor.click方法。
  • 调用document.write方法。
  • 调用document.close方法。
  • 调用window.close方法。
  • 调用window.navigate或 NavigateAndFind 方法。
  • 调用location.replace方法。
  • 调用location.reload方法。
  • location.href为属性指定一个新值。
  • 通过 INPUT 控件向 ACTION 属性中指定的地址提交表单type=submit,或调用该form.submit方法。
  • 调用该window.open方法,为_self窗口名称提供可能的值。
  • 调用document.open方法。
  • 单击“后退”、“前进”、“刷新”或“主页”按钮。

而你不能处理这个。

另请注意,window.onbeforeunload应该通知用户他离开页面的事件和处理函数应该return是字符串值,该值将包含在确认弹出窗口中(Firefox 4+bug除外)。

您不能强制用户停留在页面上。

注意:您唯一可以做的onbeforeunload就是通知用户他正在离开您的页面 (这是因为一些恶意页面可以打开另一个页面等等......以及垃圾邮件用户。这是安全限制)。

如果要在卸载窗口之前进行 AJAX 调用,则需要使用onunloadevent. 请注意,您的 AJAX 调用必须是同步的。异步调用将不起作用。

于 2012-05-17T14:25:00.207 回答
0

我在同样的问题上工作了一段时间,所以我会向你解释我发现了什么。

1)window.onbeforeunload每个浏览器处理事件的方式略有不同 - 我已经看到,无论用户是否选择留在页面上,一旦事件触发,会话就会丢失。

2)Web应用程序根本没有能力阻止用户关闭浏览器或导航离开页面(出于明显的原因),但通过实现服务器端挂钩,我能够调用必要的清理代码只有在浏览器已关闭,所以我没有费心提示用户(这有点像劫持他们的浏览器)

如果您需要在关闭窗口之前提示用户,那么您也将在他们输入新 url 时提示他们。他们是一样的

于 2012-05-21T16:46:00.867 回答
0

这个线程中的人说他基于onbeforeunload事件的方法在 IE 中有效。

恕我直言,然而,你最好的(和跨平台的)机会做你想做的事是设置一个Ajax 轮询请求这里是一个很好的演示)来检查自上次用户活动以来已经过去了多少时间并相应地清除缓存。

于 2012-05-18T18:24:28.573 回答