【发布时间】:2011-03-22 13:21:47
【问题描述】:
可能的重复:
How do I stop the Back and Refresh buttons from resubmitting my form?
Disable browser’s back button
环境:jQuery,richfaces
如何在用户界面的某些页面上禁用后退按钮导航(在菜单栏中)。
【问题讨论】:
-
这样做被认为是不好的做法,而且这个话题是骗人的!
可能的重复:
How do I stop the Back and Refresh buttons from resubmitting my form?
Disable browser’s back button
环境:jQuery,richfaces
如何在用户界面的某些页面上禁用后退按钮导航(在菜单栏中)。
【问题讨论】:
您不能禁用用户浏览器上的后退按钮。这是浏览器的一个基本特性,不能被覆盖。
您可以让您的应用程序在用户返回时中断(显示错误消息,要求用户重新开始)。这样做是个坏主意,因为这实际上是在承认您在设计应用程序时没有考虑后退按钮。如果设计正确,每个应用程序,甚至是订单、购物车、网上银行等,都应该能够使用后退按钮。如果他们不能,那就是应用程序开发人员的失败。
我见过的一种故意破坏后退按钮使用的方法是在应用程序和每个表单中的每个 URL 上传递一个令牌。令牌会在每个页面上重新生成,一旦用户加载新页面,之前页面中的任何令牌都会失效。当用户加载页面时,该页面将仅在正确的令牌(已提供给上一页上的所有链接/表单)被传递给它时显示。
我的银行提供的网上银行应用程序是这样的。如果您完全使用后退按钮,则无法再使用任何链接,也无法重新加载页面 - 相反,您会看到一条通知,告诉您无法返回,您必须重新开始。
现在,我认为这是一种处理问题的懒惰方式。这样做的在线银行应用程序会这样做,因为如果它们严格限制某人可能到达给定页面的情况数量,理论上更容易保护应用程序。与使应用程序以用户期望的方式正常工作相比,这绝对是一条捷径,但那些设计网上银行应用程序的人不太关注可用性和更专注于减少潜在的攻击媒介。他们也可能因为必须处理非常古老的计算机系统和接口而感到压力。
【讨论】:
你不能modifywindow.history 条目。如果你尝试设置window.history.length,大多数浏览器都会抛出异常。
但是你可以用onbeforeunloadlike 做一个更流畅的事情
window.onbeforeunload = function(){
return "are you sure?";
};
当用户试图离开当前页面(包括历史后退/前进)时会触发一个确认框。
【讨论】:
return confirm("are you sure?"); ;)
confirm(),事件处理程序会处理这些。