Jon*_*and 60
不要禁用预期的浏览器行为.
让您的页面处理用户返回一两页的可能性; 不要试图削弱他们的软件.
Yos*_*sho 46
我想出了一个使用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 the back button!
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它在做什么?
来自评论:
此脚本利用浏览器考虑URL中"#"符号之后的任何内容作为浏览历史记录的一部分.它的作用是:当页面加载时,"#1"被添加到URL.50ms后,"1"被移除.当用户点击"返回"时,浏览器将URL更改回"1"被删除之前的状态,但是 - 它是相同的网页,因此浏览器不需要重新加载页面. - Yossi Shasho
tho*_*ter 34
其他人采取的方法是说"不要这样做",但这并没有真正回答海报的问题.让我们假设每个人都知道这是一个坏主意,但我们很好奇它是如何完成的......
您无法在用户的浏览器上禁用后退按钮,但是如果用户返回,您可以将其设置为使应用程序中断(显示错误消息,要求用户重新开始).
我看到的一种做法是在应用程序内的每个URL上以及每个表单中传递一个令牌.令牌在每个页面上重新生成,一旦用户加载新页面,前一页面中的任何令牌都将失效.
当用户加载页面时,页面将仅显示是否向其传递了正确的令牌(已提供给上一页上的所有链接/表单).
我银行提供的网上银行应用就像这样.如果您完全使用后退按钮,则不再有链接可用,也无法再进行页面重新加载 - 相反,您会看到一条告知您无法返回的通知,而您必须重新开始.
RSo*_*erg 25
这个问题是非常相似,这一个 ...
您需要强制缓存过期才能生效.将以下代码放在您的页面代码后面.
Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
Run Code Online (Sandbox Code Playgroud)
小智 10
虽然我自己在寻找答案,但"最佳实践"已经过时......就像浏览器一样.(真正的浏览器是丑陋的化石)
最好/最安全的解决方案是浏览器实现方法/请求,其中用户可以授予页面控制界面的能力.
为什么?因为对于我目前的项目,我正在建立一个100%JavaScript构建和控制的界面..并且后退按钮在我的项目中没有位置,因为没有页面更改.(即,因为刷新而血腥快速且没有页面闪烁..就像真正的应用程序!)
我知道为什么"劫持"界面的能力不存在,我明白了.但至少我们应该有能力从浏览器请求它!现在,如果没有劫持危险,那将是真正的"最佳实践".
但浏览器是浏览器..我不希望在这方面出现任何事情.
归档时间: |
|
查看次数: |
112272 次 |
最近记录: |