在浏览器中检测返回button点击

我必须检测用户是否点击了后退button。 为此,我正在使用

window.onbeforeunload = function (e) { } 

它适用于用户点击后退button。 但是,如果用户单击F5或浏览器的重新加载button,也会触发此事件。 我该如何解决?

所以就AJAX而言

在使用大多数使用AJAX导航页面特定部分的networking应用程序时,压回来是一个巨大的问题。 我不接受“不得不closuresbutton意味着你做错了事情”,事实上,开发人员在不同的方面已经长期陷入这个问题。 这是我的解决scheme:

 window.onload = function () { if (typeof history.pushState === "function") { history.pushState("jibberish", null, null); window.onpopstate = function () { history.pushState('newjibberish', null, null); // Handle the back (or forward) buttons here // Will NOT handle refresh, use onbeforeunload for this. }; } else { var ignoreHashChange = true; window.onhashchange = function () { if (!ignoreHashChange) { ignoreHashChange = true; window.location.hash = Math.random(); // Detect and redirect change here // Works in older FF and IE9 // * it does mess with your hash symbol (anchor?) pound sign // delimiter on the end of the URL } else { ignoreHashChange = false; } }; } } 

据我已经能够告诉这个工程在Chrome 浏览器 ,Firefox, 还没有testingIE

请尝试这个(如果浏览器不支持“onbeforeunload”):

 jQuery(document).ready(function($) { if (window.history && window.history.pushState) { $(window).on('popstate', function() { var hashLocation = location.hash; var hashSplit = hashLocation.split("#!/"); var hashName = hashSplit[1]; if (hashName !== '') { var hash = window.location.hash; if (hash === '') { alert('Back button was pressed.'); } } }); window.history.pushState('forward', null, './#forward'); } }); 

我知道的最好的方式

  window.onbeforeunload = function (e) { var e = e || window.event; var msg = "Do you really want to leave this page?" // For IE and Firefox if (e) { e.returnValue = msg; } // For Safari / chrome return msg; }; 

由于后退button是浏览器的function,因此可能很难更改默认function。 虽然有一些工作。 看看这篇文章:

http://www.irt.org/script/311.htm

通常,需要禁用后退button是编程问题/缺陷的良好指示器。 我会寻找一个替代方法,如设置会话variables或存储表单是否已被提交的cookie。

我假设你正在尝试处理Ajax导航,而不是试图阻止你的用户使用后退button,这违反了有关UI开发的每一个原则。

这里有一些可能的解决scheme: JQuery历史logging Salajax 一个更好的Ajax后退button

我正在通过这种方式检测后退button:

 window.onload = function () { if (typeof history.pushState === "function") { history.pushState("jibberish", null, null); window.onpopstate = function () { history.pushState('newjibberish', null, null); // Handle the back (or forward) buttons here // Will NOT handle refresh, use onbeforeunload for this. }; } 

它的工作原理,但我必须在Chrome中创build一个cookie来检测我第一次在页面中,因为当我没有cookie的控制进入页面,浏览器做后退动作,没有任何后退button。

 if (typeof history.pushState === "function"){ history.pushState("jibberish", null, null); window.onpopstate = function () { if ( ((x=usera.indexOf("Chrome"))!=-1) && readCookie('cookieChrome')==null ) { addCookie('cookieChrome',1, 1440); } else { history.pushState('newjibberish', null, null); } }; 

}

和非常重要的是, history.pushState("jibberish", null, null); 复制浏览器历史logging。

有人知道我能修好吗?