禁用浏览器上的返回button

我正在编写一个应用程序,如果用户回来,它可能会重新发送相同的信息,并扰乱数据的stream和完整性。 如何禁用那些使用JavaScript和不使用JavaScript的用户?

不幸的是,这是不可能的。 但是,考虑您的应用程序导航模型。 你使用后/redirect/获取PRG模型? http://en.wikipedia.org/wiki/Post/Redirect/Get

这个模型比Postback模型更容易回到button。

你不应该。

您可以将一些脚本附加到页面的onbeforeunload事件上,并向用户确认他们想要做什么; 您可以进一步尝试 禁用它,但当然这只适用于开启了javascript的用户。 相反,看看重写应用程序,所以你不会在每个页面提交事务,但只在过程结束。

我强烈地敦促你们为了防止打破后退button而采取英勇的行为,这是疏远你的用户的绝对火种,甚至在1999年雅各布·尼尔森(Jacob Neilsen)的十大网页devise错误中也排名第一。

也许你可以考虑问一下这个问题:“如何避免打破后面的button来插入你的场景呢?

如果斯科特的答案接近标记,考虑改变你的stream量到PRG模型。 如果是其他的东西,那么再详细一点,看看我们如何提供帮助。

我想出了一个黑客使用JavaScript禁用后退button。 我检查了铬10,Firefox 3.6和IE9:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <title>Untitled Page</title> <script type = "text/javascript" > function changeHashOnLoad() { window.location.href += "#"; setTimeout("changeHashAgain()", "50"); } function changeHashAgain() { window.location.href += "1"; } var storedHash = window.location.hash; window.setInterval(function () { if (window.location.hash != storedHash) { window.location.hash = storedHash; } }, 50); </script> </head> <body onload="changeHashOnLoad(); "> Try to hit back! </body> </html> 

最好的select是不依赖于回发控制stream量,但是如果你坚持下去(现在)

你可以使用这样的东西:

  Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetExpires(Now.AddSeconds(-1)); Response.Cache.SetNoStore(); Response.AppendHeader("Pragma", "no-cache"); 

不久,你会发现它不适用于所有的浏览器,但是你可以在你的代码中引入一个检查:

  if (Page.IsPostBack) { if (pageIsExpired()){ Response.Redirect("/Some_error_page.htm"); } else { var now = Now; Session("TimeStamp") = now.ToString(); ViewState("TimeStamp") = now.ToString(); } private boolean pageIsExpired() { if (Session("TimeStamp") == null || ViewState("TimeStamp") == null) return false; if (Session("TimeStamp") == ViewState("TimeStamp")) return true; return false; } 

这将解决问题的一些延伸,代码未检查 – 仅用于示例目的..

可以在所有主要浏览器中禁用后退button。 它只是使用散列值来完全禁用后退button。 只需将这5行代码放在页面中即可

  <script> window.location.hash="no-back-button"; window.location.hash="Again-no-back-button";//for google chrome window.onhashchange=function(){window.location.hash="no-back-button";} </script> 

详细说明

这是以前的一篇文章: 防止使用后退button(在IE中)

无论您想出什么来禁用后退button,都不能阻止未来浏览器中的后退button。

如果在开发周期的晚期,我build议你尝试一下上面的build议,但是当你有时间的时候,你应该构build你的stream程,以便后退button不会干扰你的网站的逻辑,它只需要用户回到上一页他们期望这样做。

确实,应该加上适当的validation,以确保重复的数据不会搞砸。 但是,就像我的情况一样,我没有完全控制数据,因为我在表单之后使用了一些第三方API。 所以我用这个

 history.go(+1); 

如果用户尝试返回“付款”页面(例如付款),则会将用户转发到“付款”页面应该出现的“收据”。 尽pipe如此,谨慎使用

您可以将每个表单上的数据发布到_NEW窗口。 这将禁用每个窗口上的后退button,但没有JavaScript可能难以强制closures旧的。

罗拉的4个人写了这篇文章关于禁用后退button很久以前(在一个遥远的星系): http : //www.4guysfromrolla.com/webtech/111500-1.shtml

我能够通过使用以下方法来实现这一点:

  Response.Cache.SetExpires(DateTime.MinValue); Response.Cache.SetNoStore(); 

当我使用Response.Cache.SetCacheability(HttpCacheability.NoCache); 它阻止了我下载办公文件。

find下面的链接

在asp.net中使用JavaScript禁用浏览器后退buttonfunction ASP.Net禁用浏览器后退button(使用JavaScript)

http://www.aspdotnet-suresh.com/2011/11/disable-browser-back-button.html