如何在JavaScript中检查前进历史记录是否存在?(禁用后退按钮)

7

我使用 window.history.go(1) 来防止用户点击后退按钮,但是我想知道在执行该操作之前是否可以检查前进历史记录是否存在,以便我可以显示一个弹出窗口警告用户不要按后退按钮。

我知道可以获取历史记录的长度,但有没有办法获取当前位置?或者其他方法来实现这个功能...


7
如果你认为需要禁用“返回”按钮,那么你的网站在基本层面上做错了很多事情,你应该尝试修复它,而不是浪费时间在这个问题上。 - bobince
2
哦,绝对是一个针对更大问题的恶劣的hack,但如果你想重写我被倾倒的60多页遗留代码,以完成一个被标记为“紧急”的优先任务,那就请便吧 ;) - NibblyPig
将您的紧急任务管理员发送到此页面。也许他们会看到光明。 - Diodeus - James MacFarlane
当使用片段标识符在页面内导航时,禁用后退按钮或附加替代处理程序的功能具有完全可接受的用例。特别是在 Web 应用程序中,页面的部分加载而不是整个页面。我意识到 @bobince 的评论已经过时了,事情已经不同了,但说在单击后退按钮时做一些不同的事情是“基本上错误”的从来没有真正成立过。即使在 2009 年,这也取决于情况和用例。 - Vince
3个回答

2

0
据我所知,您无法从JavaScript访问历史记录。这将是一个安全漏洞,大多数浏览器都不允许这样做。可能在IE中可以通过使用ActiveX来解决问题。
找到了这篇文章,可能对您有用。

window.history

有一个next属性。

返回会话历史中下一项的URL。 此属性不适用于Web内容,并且其他浏览器不支持此属性。

出于安全原因,History对象不允许非特权代码访问会话历史中其他页面的URL, 但它允许导航会话历史。

没有办法清除会话历史或禁用非特权代码的后退/前进导航。最接近的可用解决方案是location.replace()方法, 它将提供的URL替换为会话历史的当前项目。


是的,看起来确实是这样,但它也让人困惑的是它会允许你获取列表中的项目数量之类的东西。 - NibblyPig
针对您的编辑,我不明白如何能够通过检查您希望调用的函数是否成功来造成安全漏洞。 - NibblyPig
这不是关于函数调用的问题,而是关于用户安全是否暴露给未知网站的问题。 - rahul

0

不要破壞返回(或前進)按鈕。

  1. 您不知道每個可能的使用者設置(包括插件等)而造成的影響。
  2. 如果腳本被禁用或禁用再啟用,您仍然需要執行某些較智能的操作(例如不損壞數據庫)。
  3. 因為您已經處理了#2,所以不必擔心如何在每個地方為每個人完成#1,並花更多時間使#2更好。
  4. 現在您的網站可以使用返回按鈕。

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