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

JavaScript

Harry小胖

2020-03-12

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

有没有办法检查这种window.location.hash变化是否

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

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

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

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

第1024篇《开启-window.location.hash-更改了吗?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

7个回答
卡卡西乐逆天 2020.03.12

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

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

逆天JinJin 2020.03.12

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

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

老丝Eva 2020.03.12

可以在http://code.google.com/p/reallysimplehistory/中找到不错的实现它具有的唯一(也是)问题和错误是:在Internet Explorer中,手动修改位置哈希将重置整个历史记录堆栈(这是浏览器问题,无法解决)。

请注意,Internet Explorer 8确实支持“ hashchange”事件,并且由于它已成为HTML5的一部分,因此您可能会期望其他浏览器跟上。

村村AL 2020.03.12

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

path.js NPM

path.js GitHub

古一达蒙 2020.03.12

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

宝儿A 2020.03.12

HTML5 指定一个hashchange事件所有现代浏览器现在都支持此事件在以下浏览器版本中添加了支持:

  • Internet Explorer 8
  • Firefox 3.6
  • 铬5
  • Safari 5
  • Opera 10.6
小卤蛋小小 2020.03.12

Ben Alman有一个很棒的jQuery插件可以解决这个问题:http : //benalman.com/projects/jquery-hashchange-plugin/

如果您不使用jQuery,则可能是一个有趣的解剖参考。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android