禁用浏览器的后退按钮

IT技术 asp.net javascript
2021-01-24 22:59:43

如何禁用浏览器的后退按钮(跨浏览器)?

6个回答

不要禁用预期的浏览器行为。

让您的页面处理用户返回一两页的可能性;不要试图削弱他们的软件。

我同意乔纳森的观点,尤其是在当前充斥互联网的重定向恶意软件广告泛滥的情况下,他们已经滥用警报系统使离开他们的页面变得困难,而没有让他们能够真正将您锁定到他们的页面
2021-03-12 22:59:43
谢谢老兄,问题是,如果您正在构建 AJAX 应用程序,在禁用后退按钮或浏览您的应用程序并为每种可能的情况制定适当的后退操作之间的成本效益权衡可能倾向于禁用后退按钮是两者中更具吸引力的选项。
2021-03-16 22:59:43
“禁用”后退按钮是一个非常常见的用例:对于任何需要身份验证/安全性的应用程序,您不希望用户能够按下后退按钮并查看其他已登录用户看到的页面。您在任何需要登录的 Web 应用程序中都会看到这种行为,例如 ameritrade.com。不幸的是,stackoverflow.com 在这方面并不是铁定的。如果您注销并开始点击后退按钮,注销中的前几页似乎受到保护,但您将能够查看登录用户访问的内容:(
2021-04-06 22:59:43

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

它在做什么?

来自评论:

该脚本利用了浏览器将 URL 中“#”符号后面的任何内容视为浏览历史记录的一部分这一事实。它的作用是这样的:当页面加载时,“#1”被添加到 URL 中。50 毫秒后,“1”被删除。当用户单击“返回”时,浏览器会将 URL 更改回删除“1”之前的 URL,但是 - 这是同一个网页,因此浏览器不需要重新加载页面。– 约西·沙绍

非常感谢。这对于我拥有的基于 JavaScript 的特别交互式页面非常有用,其中向左和向右滚动是机制的一部分。这有助于消除 Mac OS X 上的滚动手势让用户意外“返回”页面的问题(如果他们已经一直滚动,这一切都很容易)。
2021-03-12 22:59:43
这样做的问题是页面每 50 毫秒滚动到顶部。如果您的表单大于窗口高度,这将导致无法填写表单值。
2021-03-17 22:59:43
该脚本利用了浏览器将 URL 中“#”符号后面的任何内容视为浏览历史记录的一部分这一事实。它的作用是这样的:当页面加载时,“#1”被添加到 URL 中。50 毫秒后,“1”被删除。当用户单击“返回”时,浏览器会将 URL 更改回删除“1”之前的 URL,但是 - 这是同一个网页,因此浏览器不需要重新加载页面。
2021-03-23 22:59:43
看起来这个脚本在页面加载时向 URL 添加“#”,并且每 50 毫秒,它向 URL 附加一个 1。
2021-03-28 22:59:43
请注意,URL 更改了两次:我们这样做只是为了掩饰实现,因此没有人会看到我们添加了“1”。所以实际上当用户点击返回时,页面会暂时重新添加“#1”并再次将其删除。顺便说一句 - 它不必是“1”,它可以是任何字符串。
2021-04-05 22:59:43

其他人采取的方法说“不要这样做”,但这并没有真正回答海报的问题。让我们假设每个人都知道这是一个坏主意,但我们仍然很好奇它是如何完成的......

您不能禁用用户浏览器上的后退按钮,但您可以设置它以便您的应用程序在用户返回时中断(显示错误消息,要求用户重新开始)。

我见过的一种方法是在应用程序中的每个 URL 和每个表单中传递一个令牌。令牌会在每个页面上重新生成,一旦用户加载新页面,之前页面中的所有令牌都会失效。

当用户加载页面时,该页面只会显示是否将正确的令牌(已提供给上一页上的所有链接/表单)传递给它。

我的银行提供的网上银行应用程序是这样的。如果您完全使用后退按钮,则不再有链接可用,也无法重新加载页面——相反,您会看到一条通知,告诉您无法返回,必须重新开始。

这听起来像是相同的方法。他们检测到您返回并抛出错误情况。
2021-03-12 22:59:43
如果问题是用户尝试使用后退按钮时信息丢失或已经中断,那么禁用后退按钮将是更理想的方法。
2021-03-14 22:59:43
不要误会我的意思,这种做法有很多问题。我不是推荐它,我只是说它通常是如何实现的。它们在页面之间传递唯一的标记,以检测您是否没有访问上一页的预期链接之一,然后终止会话或显示错误。它破坏了后退按钮,破坏了标签式浏览,破坏了书签和/或共享链接,等等——而且,它并没有真正解决任何问题。
2021-03-16 22:59:43
我的银行采取了不同的方法 - 它完全终止了会话。使用后退按钮相当于注销。
2021-03-19 22:59:43
joomla 也解决了令牌解决方案,每个页面和每个表单都会生成一个令牌,实际上这种做法存在一些问题,例如“当用户在页面上停留太多并且他的令牌过期时”
2021-04-07 22:59:43

这个问题是非常相似,这一个...

您需要强制缓存过期才能使其工作。将以下代码放在您的页面代码后面。

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
请注意,使页面不可缓存并不能实现 OP 想要的:使用后退按钮禁用访问页面。即使浏览器在使用后退按钮时遵守无缓存(浏览器没有义务执行 AFAIK),它们仍然提供了一种重新加载该页面的方法(通常在显示警告对话框之后)。因此,如果您真的不希望您的用户返回到该页面,这可能会更糟,因为对该页面的请求必须一直到达原始服务器。您将需要一些服务器端来检测页面已被重新访问。标题可以忽略。
2021-03-14 22:59:43
禁用后退按钮是一个非常常见的用例:对于任何需要身份验证/安全性的应用程序,您不希望用户能够按下后退按钮并查看其他登录用户看到的页面。您会看到任何需要登录的 Web 应用程序中的这种行为,例如 ameritrade.com。不幸的是,stackoverflow.com 在这方面并不是铁定的。如果您注销并开始点击后退按钮,注销中的前几页似乎受到保护,但您将能够查看登录用户访问的内容:(
2021-04-04 22:59:43

当我自己寻找答案时,“最佳实践”是......过时......就像浏览器一样。(真的浏览器是丑陋的化石)

最好/最安全的解决方案是让浏览器实现一个方法/请求,用户可以在其中授予页面控制界面的能力。

为什么?因为对于我当前的项目,我正在构建一个 100% 由 JavaScript 构建和控制的界面..并且后退按钮在我的项目中没有位置,因为没有页面更改。(即,速度非常快,并且由于刷新而没有页面闪烁。就像真正的应用程序一样!)

我知道为什么没有“劫持”界面的能力,我也理解。但至少我们应该有能力从浏览器请求它!现在这将真正成为没有劫持危险的“最佳实践”。

但是浏览器就是浏览器......我不希望在这方面发生任何事情。

@MikeT - 我可以在导航窗口中输入任何其他 url,我可以关闭一个选项卡,我可以禁用 javascript。关键不在于某人是否可以,因为你可以,我可以,任何人都可以。作为政策问题,人们说你不应该,如果可以的话。我们不是在谈论如何设计浏览器,而是在谈论如何编写应用程序。
2021-03-13 22:59:43
@MikeT - 在我自己的特定应用程序页面上导航时禁用“后退”按钮将如何禁止任何人使用互联网?
2021-03-23 22:59:43
@PoloHoleSet 如果您要锁定导航,则需要锁定的不仅仅是后退按钮,因为浏览器历史记录和键入的 url 还会为用户提供绕过您的工作流程的方法。就像我说的,我们不是在谈论您或我会做什么,而是在谈论恶意元素,如果阻止恶意网站控制您的浏览器的唯一方法是禁用浏览器上的所有 js,那么您已经破坏了互联网现代网络依赖脚本来提供内容,这就是我的观点,如果您想对用户进行如此多的控制,请创建一个应用程序来为您的工作流程提供服务
2021-03-26 22:59:43
100% 不同意,虽然此功能对 99% 的 Web 开发人员来说会很棒,但剩下的 1% 会滥用此功能,在我看来,让网站控制您使用互联网的能力太危险了跨域重定向脚本需要禁止或允许确认脚本是否因为这种滥用而被允许运行
2021-03-31 22:59:43
@PoloHoleSet 如果你有能力禁用浏览器的后退按钮,那么每个人都可以,你需要的只是一个重定向,将你发送到你不想去的页面,如果他们可以在浏览器中禁用你的导航控件如何你逃跑了吗?我敢肯定您已经遇到过“您有一个病毒页面”,他们会在其中提示您安装病毒以删除不存在的病毒,现在想象一下他们实际上可以阻止您离开的站点
2021-03-31 22:59:43