在浏览器上禁用“后退”按钮

在浏览器上禁用“后退”按钮

Disabling Back button on the browser

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


不幸的是,这是不可能的。但是,请考虑您的应用程序导航模型。您是否正在使用发布/重定向/获取PRG模型? http://en.wikipedia.org/wiki/Post/Redirect/Get?

与回发模型相比,此模型对后退按钮更友好。


你不应该

您可以将一些脚本附加到页面的onbeforeunload事件中,然后与用户确认他们要执行的操作。并且您可以尝试进一步禁用它,但是当然这仅适用于启用了javascript的用户。而是着眼于重写应用程序,这样您就不必在每个页面提交时都提交事务,而仅在过程结束时提交事务。


我强烈敦促您竭尽全力,以防止折断后退按钮,这是疏远用户的可靠方法,甚至使它在1999年Jacob Neilsen的十大Web设计错误中名列第一。

也许您可以考虑问一个问题:"如何避免破坏后退按钮以<在此处插入方案>?"

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


我想到了一个小技巧,可以使用JavaScript禁用后退按钮。我在chrome 10,firefox 3.6和IE9上进行了检查:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!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">
Untitled Page
<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);



</head>
<body onloadx="changeHashOnLoad();">
Try to hit back!
</body>
</html>

最好的选择是不要依靠回发来控制流程,但是(如果您现在坚持)

您可以使用以下方式:

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

很快,您会发现它不适用于所有浏览器,但是您可以在代码中引入一个检查,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 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;
  }

这将在某种程度上解决问题,不检查代码-仅出于示例目的。


可以在所有主要浏览器中禁用"后退"按钮。它仅使用哈希值完全禁用后退按钮。
只需将这5行代码放在您的页面中

1
2
3
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";}

详细说明


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

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


这是以前的帖子:
防止使用后退按钮(在IE中)


的确,应该添加适当的验证以确保重复数据不会使事情变得混乱。但是,就像我的情况一样,由于我在表单后使用了一些第三方API,因此我无法完全控制数据。所以我用这个

1
history.go(+1);

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


查找以下链接

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

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


我能够通过使用以下命令完成此任务:

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

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


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


推荐阅读

    linux命令删除用户组?

    linux命令删除用户组?,管理,密码,系统,用户组,用户,概念,命令,文件,管理员,

    linux操作数据库命令?

    linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参

    linux下载数据命令?

    linux下载数据命令?,软件,工具,数据,系统,代理,官网,网络,名称,网址,盘中,在l

    linux浏览文件类命令?

    linux浏览文件类命令?,系统,信息,数据,情况,命令,标准,时间,文件,概念,管理,

    linux中用户创建命令?

    linux中用户创建命令?,密码,系统,用户,软件,命令,联系方式,管理,信息,用户

    linux注销命令用户?

    linux注销命令用户?,系统,服务,密码,地址,工作,命令,状态,工具,信息,基础,lin

    做数据linux常用命令?

    做数据linux常用命令?,工作,系统,基础,网络,数据,标准,管理,工具,地址,命令,l

    linux命令行创建用户?

    linux命令行创建用户?,系统,密码,软件,新增,用户,联系方式,管理,用户名,命

    linux系统用户命令?

    linux系统用户命令?,系统,工作,地址,信息,管理,命令,目录,时间,电脑,名称,请

    linux查重复数据命令?

    linux查重复数据命令?,工具,数据,系统,电脑,名字,资料,代码,百度,标准,技术,

    linux命令行打开浏览?

    linux命令行打开浏览?,系统,网络,网址,工具,密码,首页,服务,网站,数据,地址,l

    linux数据库升级命令?

    linux数据库升级命令?,系统,信息,时间,最新,网络,名字,地址,管理,简介,传播,l

    linux命令所有用户?

    linux命令所有用户?,系统,密码,信息,情况,名称,命令,用户,时间,地址,位置,如

    linux命令进入用户?

    linux命令进入用户?,系统,密码,用户,地址,信息,软件,命令,用户名,联系方式,

    linux命令用户管理?

    linux命令用户管理?,系统,密码,管理,工作,信息,地址,工具,命令,用户,基础,LIn

    linux用户与组的命令?

    linux用户与组的命令?,管理,系统,名称,用户组,密码,用户,命令,情况,信息,单

    linux添加用户的命令?

    linux添加用户的命令?,密码,系统,软件,联系方式,用户,新增,信息,管理人员,

    linux用户退出的命令?

    linux用户退出的命令?,系统,密码,命令,用户,发行,电脑,第三,地址,软件,信息,l

    linux看系统用户命令?

    linux看系统用户命令?,系统,信息,密码,命令,服务,名称,网络,情况,软件,工具,L