题
我写的应用程序,如果用户命回来,它可能重新发送同样的信息和混乱的流量和完整性的数据。我怎么禁用的用户并不javascript?
解决方案
这是不可能的,可悲的。但是,请考虑你的应用导航模型。您使用的是后/重新定向/获得PRG模式? http://en.wikipedia.org/wiki/Post/Redirect/Get?
这种模式是更多的后按钮友好比回发模型。
其他提示
你不应该。
你可以附加一些脚本到onbeforeunload事件的一页并确认用户那是什么他们想要做的事;你可以去有点进一步和 尝试 要 禁止它 但当然,这只会的工作对于用户javascript接通。而不是看重写的应用程序,这样你就不会提交的每一页上提交,但只有在结束过程。
我强烈敦促你去英勇的长度,以防止破坏,这是一个肯定的方式疏远你的用户和甚至做了它对第1号 雅各布*尼尔森的顶部的10个网页设计的错误,在1999年.
也许你可以考虑,而是问一个问题:"如何避免破坏后按钮 <insert your="" scenario="" here="">?"
如果斯科特的回答命接近标准,考虑更改你的流向PRG模型。如果是别的东西,然后得到更详细一点看看我们如何能够帮助。
我想出了一个小小的黑客,禁止返回键用JavaScript。我检查了它在铬10,firefox3.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>
最好的选择是不要取决于回发给的控制流程,但是如果你被卡住吗(现在)
你可以用这样的事情:
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;
}
这将解决问题的一些扩展,代码没有被检查--仅为举例的目的..
它可能禁止回来按钮在所有主要的浏览器。它只是使用的散列值以禁止返回键。只要把这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>
这里以前的职位:防止使用后按钮(IE)
无论你想出禁止返回按钮可不停止后按钮在未来的浏览器。
如果其后在开发周期中我建议你尝试了一些建议,上述但是,当你有时间你应该结构流程使得后按钮不会干扰逻辑的网站,它只是需要的用户回复到以前的网页,如他们期望它做的。
这是真的,适当验证的应该加以确定重复的数据并不烂摊子的事情了。然而,如在我的情况下,我不完全控制的数据,因为我使用一些第三方API后我的形式。所以我用这个
history.go(+1);
这将发送用户期待的"收到",这是该来之后"支付"页面,如果他们尝试回来"支付"的网页(只给付款为例)。有节制地使用,虽然
你可以发布的数据在每种形式,比如,当一个窗口。这将禁用背的按钮上的每个窗口,但没有javascript它可能很难力的老一个关闭。
4们从Rolla写了这篇文章在禁止返回键前很长一段时间(在银河系遥远): http://www.4guysfromrolla.com/webtech/111500-1.shtml
我能够做到这一点通过使用:
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();
当我用的响应。高速缓存。SetCacheability(HttpCacheability.NoCache);它阻止我从网上下载的办公室文件。
找到下面的链接
禁用浏览器回键功能使用的JavaScript asp.net |ASP.Net 禁用浏览器按钮(使用javascript)
http://www.aspdotnet-suresh.com/2011/11/disable-browser-back-button.html