Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Browser 禁用浏览器上的“后退”按钮_Browser_Back Button - Fatal编程技术网

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

Browser 禁用浏览器上的“后退”按钮,browser,back-button,Browser,Back Button,我正在编写一个应用程序,如果用户回击,它可能会重新发送相同的信息,并扰乱数据流和完整性。我该如何为启用和不启用javascript的用户禁用它?遗憾的是,这是不可能的。但是,请考虑应用程序导航模型。您是否使用Post/Redirect/Get PRG模型 此型号比回发型号更方便使用“后退”按钮。您不应该这样做 您可以将一些脚本附加到页面的onbeforeunload事件,并与用户确认这是他们想要做的事情;您可以进一步尝试,但当然,这只适用于打开javascript的用户。相反,你可以考虑重写应用

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

遗憾的是,这是不可能的。但是,请考虑应用程序导航模型。您是否使用Post/Redirect/Get PRG模型

此型号比回发型号更方便使用“后退”按钮。

您不应该这样做


您可以将一些脚本附加到页面的onbeforeunload事件,并与用户确认这是他们想要做的事情;您可以进一步尝试,但当然,这只适用于打开javascript的用户。相反,你可以考虑重写应用程序,这样你就不会在每个提交页面上提交事务,而只是在提交过程结束时提交。

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

这是以前的文章:

我强烈建议您尽最大努力防止“后退”按钮被打断,这无疑会疏远您的用户,甚至使其成为网络上的头号人物

也许你可以考虑问一个问题:“如何避免后退按钮?”


如果史葛的答案接近于标准,考虑将你的流程更改为PRG模型。如果是其他原因,请提供更多详细信息,看看我们能提供什么帮助。

最好的选择是不要依赖回发来控制流量,但如果您(目前)仍在使用回发

您可以使用类似以下内容:

  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;
  }

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

在未来的浏览器中,您提出的禁用后退按钮的方法可能不会停止后退按钮


如果开发周期较晚,我建议你尝试上面的一些建议,但是当你有时间的时候,你应该组织你的流程,这样后退按钮就不会干扰网站的逻辑,它只是让用户像预期的那样返回到上一页。

我想出了一个小技巧,使用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>

无标题页
函数changehasonload(){
window.location.href+=“#”;
setTimeout(“changehashtreach()”,“50”);
}
函数changehash(){
window.location.href+=“1”;
}
var storedHash=window.location.hash;
window.setInterval(函数(){
if(window.location.hash!=storedHash){
window.location.hash=storedHash;
}
}, 50);
试着反击!

我可以通过以下方式实现这一点:

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

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

的确,应该添加适当的验证,以确保重复数据不会把事情搞砸。然而,在我的例子中,我没有完全控制数据,因为我在表单之后使用了一些第三方API。所以我用了这个

history.go(+1);
如果用户试图返回到“付款”页面,这会将用户发送到“收据”,该收据应该位于“付款”页面之后(例如,仅给出付款)。尽量少用,但要找到下面的链接

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


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

window.location.hash=“无后退按钮”;
window.location.hash=“再次没有后退按钮”//谷歌浏览器
window.onhashchange=function(){window.location.hash=“无后退按钮”;}

如果我在使用你的网站,后退按钮仍然是我的。不要弄乱我的东西…;-)这是个错误的问题。您应该做的是设计应用程序,以便当信息重新出现时,应用程序能够识别它并采取适当的行动。这没有什么不好的。这一点是正确的。我只是很难过斯科特-禁用工具栏和右键单击菜单的功能是否特定于IE?我见过完全锁定导航的LOB应用程序,但(同样令人遗憾的是)它们也要求用户拥有IE。好吧,有些应用程序可以在“Kiosk”模式下运行,但这涉及使用命令行开关启动IE。是否可以在返回按钮引导我们进入上一页之前提出确认问题?在我创建帖子时,推荐引擎没有显示它:(他没有说他想“打破”后退按钮。他想避免一个常见的陷阱,即现代Ajax设计模式失败,因为用户按下“后退”,意思是“撤销我刚刚用Ajax应用做的事情”而是“返回一个任意且不明确的HTTP请求”。对我来说,这只是“他不想破坏后退按钮,他只是想破坏后退按钮以防止它被破坏”:S有可能让AJAX/JavaScript和后退按钮播放得很好,我建议的是我建议遵循的路线。Hmmm…离开页面导航时也会调用onbeforeunload事件,因为用户只是转到另一个页面(不仅仅是因为用户按下了后退按钮),脚本将被调用。但它可以工作-继续并测试它。我不怀疑这一点。这对用户来说是一个糟糕的体验,他们可能真的想回去。IE9不允许我向下滚动这个。在最新的FF、Chrome、Safari中工作得很好。使用我的单页应用程序的人只会有IEIT,这并不总是一个糟糕的体验或者用户,有时这是正确的体验。例如,一个页面可能会使用Ajax改变其状态,例如gmail。当用户单击“上一步”时