如何检测浏览器的后退按钮和新窗口?

6

我毫不怀疑这些可能已经在互联网上有记录,并被谷歌索引 - 但是在浏览了许多关于禁用此功能的讨论链接后,我想询问是否有人可以提供有关仅检测其使用情况的有用答案。

更好的文章中描述的禁用返回按钮的方法仅通过创建页面转换来实现 - 因此对于检测没有太大用处。

window.history.next的存在可能为检测返回按钮提供机制 - 但它得到了广泛支持吗?是否需要不寻常的特权?

Jonathan的答案看起来很有前途 - 但是预设我可以在第一个着陆时设置窗口名称 - 我想我可以使用缺少cookie来检测第一次点击。还有其他想法吗?

TIA


2
Jonathan的回答可能看起来很有前途,但是bobince所接受的答案才是正确的:你不能这样做。唯一合理的方法是在服务器端构建您的应用程序,以便即使用户返回,它也可以正常工作。这并不难,并且可以防止其他“意外”的用户操作,例如重新加载、提交表单两次、打开其他窗口等。 - RoToRa
我一直在尝试,可以使用MSIE和Firefox中的history.length检测大多数新窗口实例。即Jonathan的答案对于大多数新窗口是有效的(请参见我的评论)。但是关于后退按钮:在Firefox中,history.next受到保护。不幸的是,修复当前的代码库不是一个选项。 - symcbean
2个回答

0

使用sessionStorage/localStorage。

if (!sessionStorage.hasBeenHereBefore) sessionStorage.hasBeenHereBefore = true;
else {
    // Code to run if they've been here before.
}

如果您使用sessionStorage,那么如果他们关闭浏览器并回来,它会看起来像第一次,但如果您使用localStorage,它将永久保留。
您可以尝试寻找一些秘密事件,例如:
window.addEventListener('historyback', function () {}, false);
window.addEventListener('navigateback', function () {}, false);
window.addEventListener('returntopage', function () {}, false);

我认为这是对另一个问题的回答,而不是我提出的问题。我试图解决的问题是服务器端会话状态与用户选择的当前位置不匹配的情况。 - symcbean
我知道,但现在这已经是你能得到的最接近的了。你可以尝试一些窗口事件。(例如在答案中) - McKayla

0

我之前写了一些代码。这个脚本从未经过完全测试,但你应该能够提取一些技巧来实现与其检测后退按钮相同的效果。

http://pastebin.no/32fx


谢谢Christian - 我在提问后发现了这篇文章(https://dev59.com/IXVC5IYBdhLWcg3w9GE9#2348076),它采用了类似的方法。这绝对是解决问题的正确方法。 - symcbean
如果您最终使用了我的脚本,我很想看看您用它做了什么 :) - Christian Tellnes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接