56

如何在 Firefox 中知道是单击了刷新按钮还是单击了浏览器后退按钮...对于这两个事件onbeforeunload()方法都是回调。对于 IE,我是这样处理的:

function CallbackFunction(event) {
    if (window.event) {
        if (window.event.clientX < 40 && window.event.clientY < 0) {
            alert("back button is clicked");
        }else{
            alert("refresh button is clicked");
        }
    }else{
        // want some condition here so that I can differentiate between
        // whether refresh button is clicked or back button is clicked.
    }
}

<body onbeforeunload="CallbackFunction();"> 

但在 Firefox 中event.clientXevent.clientY 始终为 0。有没有其他方法可以找到它?

4

4 回答 4

60

用于刷新事件

window.onbeforeunload = function(e) {
  return 'Dialog text here.';
};

https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload?redirectlocale=en-US&redirectslug=DOM%2Fwindow.onbeforeunload

$(window).unload(function() {
      alert('Handler for .unload() called.');
});
于 2013-09-04T13:01:11.657 回答
15

使用 'event.currentTarget.performance.navigation.type' 来确定导航的类型。这适用于 IE、FF 和 Chrome。

function CallbackFunction(event) {
    if(window.event) {
        if (window.event.clientX < 40 && window.event.clientY < 0) {
            alert("back button is clicked");
        }else{
            alert("refresh button is clicked");
        }
    }else{
        if (event.currentTarget.performance.navigation.type == 2) {
            alert("back button is clicked");
        }
        if (event.currentTarget.performance.navigation.type == 1) {
            alert("refresh button is clicked");
        }           
    }
}
于 2013-09-04T19:45:25.387 回答
7

对于 jquery 中的后退按钮 // http://code.jquery.com/jquery-latest.js

 jQuery(window).bind("unload", function() { //

并且在 html5 中有一个事件 ,该事件被称为 'popstate'

window.onpopstate = function(event) {
alert("location: " + document.location + ", state: " + JSON.stringify(event.state));
};

对于刷新,请检查 检查页面是否在 Javascript 中重新加载或刷新

在 Mozilla Client-x 和 client-y 位于文档区域 https://developer.mozilla.org/en-US/docs/Web/API/event.clientX

于 2013-08-29T11:53:16.727 回答
-8
var keyCode = evt.keyCode;
if (keyCode==8)
alert('you pressed backspace');

if(keyCode==116)
alert('you pressed f5 to reload page')
于 2013-09-05T05:25:56.610 回答