防止使用后退按钮(在IE中)

时间:2008-09-10 16:08:25

标签: javascript internet-explorer back-button

因此,我目前就业地点的中小企业想要尝试禁用某些页面的后退按钮。我们有一个页面,用户进行一些选择并提交它们进行处理。在某些情况下,他们必须在另一页上输入评论。

用户已经想到的是,如果他们提交信息并转到带有评论的页面,则不必输入评论,然后点击后退按钮返回上一页。

我知道有几种不同的解决方案(其中许多解决方案比禁用后退按钮更优雅),但这就是我留下的。是否可以通过改变后退按钮的行为来阻止某人返回上一页。 (如提交 - >返回false sorta事物)。

由于双重发布信息,我不能让它返回上一页然后转到当前页面。我只能直接离开当前页面。我用谷歌搜索它,但我只看到帖子说它将永远返回上一页。我希望有人有一些疯狂的功夫技能可以使这成为可能。

我知道每个人都说这是一个坏主意,我同意,但有时你只需做你所说的。

15 个答案:

答案 0 :(得分:41)

不要这样做,只是不要这样做。这是糟糕的界面设计,并迫使用户的浏览器以他们不期望的方式运行。

我认为任何成功阻止我的后退按钮的脚本都会成为一个黑客,我希望IE团队能够为它发布一个安全修复程序。

后退按钮是其程序界面的一部分,而不是您的网站。

在您的具体情况下,我认为最好的办法是向页面添加一个卸载事件,如果用户尚未填写表单,则会向用户发出警告。后退按钮不受影响,用户将收到警告他们的行动。

答案 1 :(得分:5)

不,你注定要失败。即使你在一些不同的浏览器中弹出页面并隐藏了后退按钮,也总是有退格键。

营销人员和分析师类型的问题在于,他们中的一些人不了解网络无国籍的基本概念。他们不明白该页面是完全没有意识到使用它的浏览器,并且浏览器的绝对控制完全超出了网页的能力。

阻止用户点击后退按钮的最佳方法是确保您的页面在按下时失去所有其数据,例如,评论页面是数据的唯一点可以保存,如果他们按下后退按钮,他们必须重新做所有(想一想pragma:nocache)。

用户会抱怨,当然,但他们是这个被遗弃的要求存在的原因,对吗?

答案 2 :(得分:4)

我之前见过这个:

window.onBack = history.forward();

这绝对是一个肮脏的黑客,如果可能的话,我会尝试不禁用后退按钮。并且用户可能仍然可以很容易地解决它。并且取决于缓存,无法确定是否将处理服务器代码或者是否首先运行带有JavaScript的缓存页面。

所以,是的,使用风险自负:)

答案 3 :(得分:4)

我想出了一个使用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";
}
// If you want to skip the auto-positioning at the top of browser window,you can add the below code:
window.location.hash=' ';
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>

答案 4 :(得分:3)

您是否可以访问服务器端源代码?如果是这样,如果已经提交了信息,您可以检查重定向到第二页的第一页(显然,您需要使用会话)。在以前的工作中,这就是我们处理多步骤应用程序的方式(应用程序与接受申请一样)。

答案 5 :(得分:2)

您可以将评论移至上一页并将其设为必填字段吗?

禁用后退按钮将无效。

答案 6 :(得分:2)

由于浏览器中javascript的安全隔离,您无法更改后退按钮的功能。

也许你可以在用户的​​会话中存储一些表明需要评论的内容,并在应用程序中有任何用户试图加载重定向到评论页面的页面?

如果用户在收到评论页面时关闭浏览器该怎么办?

我知道你没有在这里做出选择,但因为他们的要求似乎是不可能的......

在用户输入评论之前,您可能不会认为该项目已完成。因此,您需要跟踪正在进行的项目和已完成的项目,并在UI中进行区分,但这可能是最强大的方法。

或者只是将评论字段放在表单页面上?

答案 7 :(得分:2)

  

用户已经想到了什么   他们没有必要进入   如果他们提交信息,请发表评论   并转到带有评论的页面   然后点击后退按钮返回   到上一页。

然后他们可能也足够聪明,可以在评论栏中输入'no comment'

你可以尝试强迫人们添加评论,但你可能最终会得到糟糕的无法使用的软件,烦恼的用户,仍然没有得到评论。这通常是退后一步并从用户的角度重新考虑您正在做的事情的好时机。

答案 8 :(得分:1)

禁用后退按钮似乎是一种“强力”方法。

另一种选择是你可以跳转到没有命令按钮的模态对话框,引导用户完成工作流程,并在过程完成时关闭对话框。

答案 9 :(得分:1)

您应该保护您的应用程序免于双重提交,而不是破坏用户界面以隐藏错误。

答案 10 :(得分:0)

没有可靠的方法来做到这一点。您无法保证100%的时间都可以阻止用户执行此操作。

考虑到这一点,是否值得采用非常奇特的解决方案来禁用“大多数”时间?那是你决定的。

祝你好运。

答案 11 :(得分:0)

作为一个简单的解决方案:尝试这个。在其中插入更新面板和按钮,然后使用javascript将其隐藏,然后在页面加载时按下它。是的,我知道它会导致您的页面在加载时重新发布,如果禁用了javascript,可能无效,但肯定会帮助您实现对后退按钮问题的一半反应。安迪

答案 12 :(得分:0)

您可以阻止它们返回上一页。 location.replace()用新页面替换当前页面的历史记录条目,所以......

page1.html:用户点击转到page2.html的链接

page2.html:用户点击调用location.replace('page3.html');

的链接

page3.html:用户点击后退按钮并转到page1.html

这可能不适合执行POST,但您可以通过AJAX将数据发布到Web服务,然后调用location.replace()

答案 13 :(得分:0)

如果您从头开始创建新的网络应用,或者您有足够的时间重新设计应用,则可以使用JavaScript和AJAX来避免浏览器的历史记录,后退和转发功能。

  • 在登录之前或之后立即在新窗口中打开您的应用程序。
  • 如果您愿意,可以使用窗口选项隐藏导航栏(使用后退和前进按钮)。
  • 将AJAX用于所有服务器请求,而无需更改窗口的位置URL。
  • 使用简单的Web API获取数据并执行操作,并使用JavaScript呈现应用程序。
  • 窗口历史记录中只有一个网址。
  • 后退和前进按钮无效。
  • 退出时可以自动关闭窗口。
  • 浏览器历史记录中没有泄露任何信息,这有助于提高安全性。

这种技术回答了这个问题,但它也在几个方面与最佳实践相矛盾:

  • 后退和前进按钮的行为应符合预期。
  • 应用程序不应该打开新的浏览器窗口。
  • 应用程序仍然可以在没有JavaScript的情况下运行。

在使用此技术之前,请仔细考虑您的要求和用户。

答案 14 :(得分:0)

我没有看到这个解决方案:

&#13;
&#13;
function removeBack(){
	window.location.hash="nbb";
	window.location.hash="";
	window.onhashchange=function(){window.location.hash="";}
}
&#13;
&#13;
&#13;