禁用浏览器上的后退按钮 [关闭]
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 浏览器后退按钮上的表单字段自动完成功能