禁用浏览器上的后退按钮 [关闭]

Posted

技术标签:

【中文标题】禁用浏览器上的后退按钮 [关闭]【英文标题】:Disabling Back button on the browser [closed] 【发布时间】:2010-09-10 09:17:40 【问题描述】:

我正在编写一个应用程序,如果用户回击,它可能会重新发送相同的信息并打乱数据的流动和完整性。如何为打开和未打开 javascript 的用户禁用它?

【问题讨论】:

如果我使用的是您的网站,后退按钮仍然是我的。不要乱用我的东西... ;-) 这是个错误的问题。您应该做的是设计应用程序,以便在重新发送信息时,应用程序将识别它并采取适当的行动。 【参考方案1】:

可以在所有主要浏览器中禁用后退按钮。它只是使用哈希值来完全禁用后退按钮。 只需将这 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> 

Detailed description

【讨论】:

棘手的一个..但有效... @Ankit:太棒了!救了我的命!谢谢!!! 不能在所有情况下正常工作,即 chrome、safari。 请不要这样做!如果页面与基本的浏览器功能混淆,那真的很烦人。 我完全明白我只是回答了它来回答所提出的问题,由读者决定它是否好【参考方案2】:

找到下面的链接

在asp.net 中使用JavaScript 禁用浏览器后退按钮功能| ASP.Net 禁用浏览器后退按钮(使用 javascript)

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

【讨论】:

【参考方案3】:

确实,应该添加适当的验证以确保重复数据不会搞砸。但是,就我而言,我无法完全控制数据,因为我在表单之后使用了一些第三方 API。所以我用了这个

history.go(+1);

如果用户尝试返回“付款”页面(例如,仅进行付款),这会将用户转发到应该位于“付款”页面之后的“收据”。不过要谨慎使用

【讨论】:

【参考方案4】:

我能够通过使用:

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

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

【讨论】:

【参考方案5】:

我想出了一个小技巧,可以使用 JavaScript 禁用后退按钮。我在 chrome 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>

【讨论】:

但它有效 - 继续测试它。 我不怀疑。这对用户来说只是一种糟糕的体验,他们实际上可能想要返回。 IE9 不允许我向下滚动查看这个。在最新的 FF、Chrome、Safari 中运行良好。不过,将使用我的单页应用程序的人只能使用 IE 对用户而言,它并不总是糟糕的体验,有时它是正确的体验。例如,页面可以使用 Ajax 更改其状态,例如邮箱当用户点击“返回”时,用户实际上希望页面回到之前的状态,而不是回到之前的页面 虽然不是非常好,但这个解决方案非常适合我正在处理的特定应用程序,并且效果很好。 IE9有问题是有原因的吗?向下滚动时,它会不断跳回页面顶部。我们的 IE9 用户有什么解决方案吗?【参考方案6】:

无论您想出什么来禁用后退按钮,都可能不会在未来的浏览器中停止后退按钮。

如果它处于开发周期的后期,我建议您尝试上面的一些建议,但是当您有时间时,您应该构建您的流程,以便后退按钮不会干扰您网站的逻辑,它只是将用户带回到上一页,就像他们期望的那样。

【讨论】:

【参考方案7】:

最好的选择是不要依赖回发来控制流量,但是如果你坚持使用它(现在)

你可以使用这样的东西:

  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;
  

这将在一定程度上解决问题,代码未检查——仅用于示例目的..

【讨论】:

【参考方案8】:

我强烈建议你不遗余力地防止破坏后退按钮,这是一种疏远用户的可靠方法,甚至在Jacob Neilsen's Top 10 Web Design Mistakes in 1999 上排名第一。

也许您可以考虑提出以下问题:“如何避免破坏的后退按钮?”

如果 Scott 的答案接近分数,请考虑将流程更改为 PRG 模型。如果是其他问题,请提供更多详细信息,看看我们如何提供帮助。

【讨论】:

他并没有说他想“打破”后退按钮。他希望避免现代 Ajax 设计模式失败的常见陷阱,因为用户按下“返回”,意思是“撤消我刚刚对你的 Ajax 应用程序所做的事情”,而是得到“返回一个任意和模棱两可的 HTTP 请求”。 对我来说,只是读到“他不想破坏后退按钮,他只是想破坏后退按钮以防止它被破坏”。 :S 可以让 AJAX/JavaScript 和后退按钮玩得很好,我建议的只是这将是我建议遵循的路线。【参考方案9】:

这是以前的帖子: Prevent Use of the Back Button (in IE)

【讨论】:

好吧,推荐引擎在我创建帖子时没有显示它:(【参考方案10】:

您可以将每个表单上的数据发布到 _NEW 窗口。这将禁用每个窗口上的后退按钮,但如果没有 javascript,可能很难强制关闭旧窗口。

【讨论】:

【参考方案11】:

你不应该。

您可以将一些脚本附加到页面的 onbeforeunload 事件中,并与用户确认他们想要执行的操作;你可以走得更远一点,try 到disable it,但当然这只适用于打开了 javascript 的用户。相反,请考虑重写应用程序,这样您就不会在每个提交页面时提交事务,而只是在流程结束时提交。

【讨论】:

Hmmm... onbeforeunload 事件也会在离开页面时被调用,因为用户只是去另一个页面(不仅仅是因为用户按下了后退按钮),并且脚本会被调用.【参考方案12】:

很遗憾,这是不可能的。但是,请考虑您的应用程序导航模型。你在使用 Post/Redirect/Get PRG 模型吗? http://en.wikipedia.org/wiki/Post/Redirect/Get?

此模型比 Postback 模型对返回按钮更友好。

【讨论】:

没什么可悲的。 有效点。我只是很难过。 ;) Scott - 那么禁用工具栏和右键菜单 IE 的能力是特定的吗?我见过完全锁定导航的 LOB 应用,但(再次遗憾地)它们还要求用户拥有 IE。 嗯,一些应用程序可以在“Kiosk”模式下自行运行,但这需要使用命令行开关启动 IE。 是否可以在返回按钮引导我们到上一页之前提出确认问题?如果可以,如果取消,请继续原地不动。

以上是关于禁用浏览器上的后退按钮 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

关闭 Internet Explorer 浏览器后退按钮上的表单字段自动完成功能

求HTML网页点击UE浏览器上的后退按钮后能回到上一次浏览的网页的代码!

如何禁用浏览器后退按钮..? [复制]

如何用jQuery禁用浏览器的前进后退按钮

Codeigniter 按下注销按钮并禁用后退浏览器按钮

使用jquery在浏览器中禁用后退按钮?