开启-window.location.hash-更改了吗?

核能气质少年 提交于 2020-02-27 08:19:12

我正在使用Ajax和哈希进行导航。

有没有办法检查window.location.hash是否像这样更改?

http://example.com/blah #123 http://example.com/blah #456

如果我在加载文档时检查它,它将起作用。

但是,如果我具有基于#hash的导航,则在按浏览器上的“后退”按钮时将无法使用(因此,我从blah#456跳至blah#123)。

它显示在地址框中,但我无法用JavaScript捕获它。


#1楼

在IE浏览器中,有很多技巧可以处理历史记录和window.location.hash:

  • 正如原始问题所说,如果您从页面a.html#b转到a.html#c,然后单击“后退”按钮,浏览器将不知道该页面已更改。 让我举个例子:无论您位于a.html#b还是a.html#c中,window.location.href均为'a.html#c'。

  • 实际上, 当页面中先前存在元素“ <a name="#b">”和“ <a name="#c">”时,a.html#b和a.html#c才会存储在历史记录中。

  • 但是,如果将iframe放在页面中,请从该iframe中的a.html#b导航到a.html#c,然后单击“后退”按钮,iframe.contentWindow.document.location.href会按预期更改。

  • 如果您在代码中使用“ document.domain = something ”,那么您将无法访问iframe.contentWindow.document.open()“(许多历史记录管理器都这样做)

我知道这不是一个真实的答案,但也许IE历史记录记录对某些人有用。


#2楼

我使用了一个jQuery插件HUtil ,并在其顶部编写了一个类似UI的YUI历史记录。

检查一次。 如果您需要帮助,我可以提供帮助。


#3楼

我一直在使用path.js进行客户端路由。 我发现它非常简洁,轻巧(它也已发布到NPM),并且利用了基于哈希的导航。

path.js NPM

path.js GitHub


#4楼

从3.6开始,Firefox发生了一次onhashchange事件。 参见window.onhashchange


#5楼

另一个很好的实现是jQuery历史记录 ,如果浏览器支持它,它将使用本机onhashchange事件;否则,它将为浏览器使用适当的iframe或间隔,以确保成功模拟所有预期功能。 它还提供了一个不错的接口来绑定到某些状态。

另一个值得注意的项目是jQuery Ajaxy ,它是jQuery History的扩展,可以将ajax添加到混合中。 当您开始使用带有哈希值的ajax时,它变得相当复杂

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!