用户发现,如果提交信息并进入带有注释的页面,然后"/>

关于javascript:防止使用”后退”按钮(在IE中)

关于javascript:防止使用”后退”按钮(在IE中)

Prevent Use of the Back Button (in IE)

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

用户发现,如果提交信息并进入带有注释的页面,然后单击返回按钮以返回上一页,则无需输入注释。

我知道有多种解决方案(许多方法要优雅得多,然后禁用后退按钮),但这就是我剩下的。是否可以通过更改"后退"按钮的行为来防止某人返回上一页。 (就像提交->返回错误的sorta一样)。

由于两次发布信息,我无法让它返回到上一页,然后移至当前页面。我只能让它不直接离开当前页面。我用Google搜索了它,但是我只看到帖子说它将始终返回到上一页。我希望有人拥有一些疯狂的功夫js技能,可以使之成为可能。

我了解到每个人都说这是一个坏主意,我同意,但是有时候您只需要按照所告诉的去做。


请勿这样做,请不要这样做。这是不良的界面设计,它会迫使用户的浏览器以他们意想不到的方式运行。

我会将成功阻止后退按钮正常工作的任何脚本都视为黑客,并且我希望IE团队为其发布安全修复程序。

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

在您的特定情况下,我认为最好的选择是在页面上添加一个卸载事件,以警告用户是否尚未填写表单。后退按钮将不受影响,并且将警告用户其操作。


不,你注定了。即使您在其他浏览器中弹出页面并隐藏"后退"按钮,也始终会有Backspace键。

营销人员和分析师类型的问题在于,其中一些人不了解网络无状态的基本概念。他们不了解该页面是完全,完全不知道使用该页面的浏览器,并且对浏览器的绝对控制完全超出了网页的功能。

劝阻用户单击"后退"按钮的最佳方法是确保用户按回时您的页面丢失所有数据,例如,注释页面是可以保存数据的唯一点,并且请确实按下返回按钮,他们必须重新做一遍所有事情(考虑实用性:nocache)。

用户肯定会抱怨,但这是存在被抛弃的要求的原因,对吗?


我想出了一个小技巧,可以使用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
29
<!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";
}
// 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);



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

我以前见过:

1
window.onBack = history.forward();

这绝对是一个肮脏的hack,如果可能的话,我将尝试不禁用后退按钮。用户可能仍然可以很轻松地解决它。而且,根据缓存的不同,也无法确定是否将处理服务器代码,或者是否将首先运行带有JavaScript的缓存页面。

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


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


What the users have figured out is
that they don't have to enter a
comment if they submit the information
and go to the page with the comment
and then hit the back button to return
to the previous page.

这时,他们可能也足够聪明,可以在评论字段中输入\\'no comment \\'。

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


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

也许您可以在用户的??会话中存储一些内容,以表明需要注释,并且应用程序中有任何页面供用户尝试将其重定向到注释页面?

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

我知道您在这里没有选择的余地,但是鉴于他们的要求似乎是不可能的...

在用户输入评论之前,您可能只是认为项目未完成。因此,您需要同时跟踪进行中的项目和已完成的项目,并在UI中进行区分,但这可能是最可靠的方法。

还是仅将评论字段放在表单页面上?


您可以将注释移到上一页并将其设置为必填字段吗?

禁用后退按钮将不起作用。


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


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

另一种选择是,您可以跳到不带命令按钮的模式对话框,引导用户完成工作流程,并在过程完成后关闭对话框。


我看不到此解决方案:

1
2
3
4
5
function removeBack(){
\twindow.location.hash="nbb";
\twindow.location.hash="";
\twindow.onhashchange=function(){window.location.hash="";}
}


如果要从头开始新的Web应用程序,或者有足够的时间来重做应用程序,则可以使用JavaScript和AJAX来避免浏览器的历史记录,后退和前进功能。

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

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

  • 后退和前进按钮的行为应与预期的一样。
  • 应用程序不应打开新的浏览器窗口。
  • 没有JavaScript的应用仍然可以正常运行。

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


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

page1.html:用户单击一个链接,该链接转到page2.html

page2.html:用户单击一个调用location.replace('page3.html');

的链接

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

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


作为一种简单的解决方案:试试这个。在其中插入一个更新面板和一个按钮,并使用javascript隐藏它,然后在页面加载时按它。是的,我了解这会导致您的页面重新加载,并且如果禁用了javascript可能无法正常工作,但是可以肯定地帮助您对后退按钮问题做出半个体面的响应。安迪


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

考虑到这一点,是否有必要采用极具异国情调的解决方案来禁用"大多数"时间?这由您决定。

祝你好运。


推荐阅读

    linux文件输入命令?

    linux文件输入命令?,工作,系统,地址,信息,工具,位置,命令,设备,发行,首开,lin

    linux命令行不能输入?

    linux命令行不能输入?,工作,系统,电脑,服务,命令,名字,首次,百度,管理,第一,l

    怎么提交linux命令?

    怎么提交linux命令?,服务,系统,环境,最新,百度,下来,数据,密码,地址,工作,用T

    linux快捷输入命令?

    linux快捷输入命令?,系统,位置,命令,终端,名称,首页,分行,第一,快捷键,窗口,l

    linux打命令输入密码?

    linux打命令输入密码?,密码,系统,状态,代码,管理,标的,位置,地址,名称,命令,L

    linux输入命令后乱码?

    linux输入命令后乱码?,系统,乱码,中文,情况,环境,地方,名称,字符集,服务器,

    linux输入命令无反应?

    linux输入命令无反应?,密码,系统,数据,命令,工具,时报,信息,检测,文件,反应,L

    linux命令行输入引号?

    linux命令行输入引号?,系统,密码,命令,电脑,标准,地方,环境,管理,名字,表示,

    怎么输入linux命令?

    怎么输入linux命令?,系统,工具,命令,电脑,工作,终端,数字,时间,软件,分行,lin

    linux输入命令删除键?

    linux输入命令删除键?,名称,系统,档案,命令,文件,目录,不了,数据,文件夹,终

    linux多个命令输入?

    linux多个命令输入?,系统,工具,工作,命令,电脑,地址,信息,软件,服务,连续,Lin

    linux命令重复输入?

    linux命令重复输入?,软件,信息,状态,标的,工具,系统,命令,终端,模式,编辑,在l

    linux连续输入命令?

    linux连续输入命令?,系统,工作,地址,连续,命令,信息,电脑,基础,标准,状态,lin

    linux命令行重复输入?

    linux命令行重复输入?,地址,工作,系统,信息,命令,目录,服务,管理,标准,电脑,l

    linux命令输入提示?

    linux命令输入提示?,地址,系统,工作,命令,分析,网站,环境,异常,信息,电脑,lin

    linux命令从哪里输入?

    linux命令从哪里输入?,系统,位置,地址,电脑,命令,终端,信息,情况,首开,管理,l

    linux出命令无法输入?

    linux出命令无法输入?,工具,密码,数字,项目,下来,电脑,状态,不了,命令,小键

    linux重定向命令输入?

    linux重定向命令输入?,标准,设备,文件,命令,位置,信息,系统,人员,基础知识,

    linux命令从哪输入?

    linux命令从哪输入?,系统,工具,地址,终端,命令,管理,分行,首页,位置,发行,lin

    linux基本命令的输入?

    linux基本命令的输入?,地址,工作,系统,命令,信息,管理,目录,工具,电脑,网站,l