JQuery中做URL哈希/历史记录的最佳库是什么?

23

我一直在查找jQuery库中与URL哈希有关的内容,但没有发现好的选择。有一个“history plugin”,但我们都知道它有缺陷并且不够灵活。

我正在将页面加载到一个div中。我需要一种方法来实现url哈希的前进/后退功能。

mydomain.com/#home
mydomain.com/#aboutus
mydomain.com/#register

有哪个最好的库可以处理所有这些?

6个回答

25

我最近看了三个不同的插件 - jquery历史插件historyjQuery BBQ

它们都很难设置,虽然我成功地使用了jQuery.history,但在IE7上仍然存在问题。因此,我改用BBQ,在我们所有目标浏览器(IE6、IE7、IE8、Fx3)上都正常工作。

所以我推荐使用jQuery BBQ插件。

编辑:这里是我刚写的一篇博客文章,演示了如何使用jQuery BBQ处理级联下拉菜单的浏览器后退按钮。


1

你尝试过jQuery Address吗?这是由Asual团队开发的,他们还制作了SWFAdress。Asual - jquery Address

jQuery Address插件提供了强大的深度链接功能,允许创建指向网站部分或应用程序状态的唯一虚拟地址。


我尝试了这个插件,但它在注册更改事件时出现了问题。 - Chev

1

History.js 得到了很好的文档记录和维护,并支持所有浏览器。

https://github.com/browserstate/history.js

来自网站:

History.js 在所有浏览器中优雅地支持 HTML5 History/State API (pushState、replaceState 和 onPopState),包括对数据、标题和 replaceState 的持续支持。它支持 jQuery、MooTools 和 Prototype。 对于支持 HTML5 的浏览器,这意味着您可以直接修改 URL,而无需再使用哈希。 对于 HTML4 浏览器,它将恢复使用旧的 onhashchange 功能。


0

我在reallysimplehistory(原名dhtmlHistory)方面运气不错。它不是特定于jQuery的,但它可以在IE、Firefox和Webkit中工作,并且不需要太多设置。


这个软件似乎是2009年的,最新的Google Group帖子是在2013年。现在代码也不容易获取。 - David Spector

0
也许可以尝试使用这个 jQuery History 插件:https://github.com/balupton/jquery-history/ 它提供跨浏览器支持,绑定到哈希值,重载哈希值,还有其他功能。
它还有一个用于 Ajax 的扩展,可以将您的网页轻松升级为真正的 Ajax 应用程序:https://github.com/balupton/jquery-ajaxy/ 总体而言,该插件有很好的文档支持和丰富的功能。它还在这里赢得了一个奖励问题 如何在 URL 中显示 Ajax 请求? 如果您想使用 HTML5 History API,还有一个选择:https://github.com/browserstate/history.js

第一个链接似乎因为安全问题已经失效了。 - David Spector

-4

据我所知,所有历史记录插件都做同样的事情:

setInterval(function() {
   if(theHashChanged) {
      someFunction(oldHash,newHash);
   }
}, 500/*whatever*/);

那基本上就是它的核心(减去添加历史记录条目的浏览器 hack 等)。它总是会有 bug,因为它有点像 hack,并且没有适用于处理历史更改的跨浏览器 API。

除此之外,这种类型的用户体验也不是很好。用户不知道他们必须点击4次返回按钮才能离开页面。


1
-1: 一点也没帮助。自从什么时候用户期望后退按钮将他们带出页面了?难道你只浏览Flash网站吗? - nikow
1
@nikow 这是基于我在一个大型面向公众的网站上的经验。仅仅因为你可以实现这样的功能,并不意味着你应该这样做。老实说,我无法想象出一个比这个功能更有帮助而不会让人感到烦恼的网站。 - noah
1
@nikow - "自从什么时候用户期望后退按钮会将他们带离页面?" 我认为自从 Web 和 Web 浏览器首次推出以来就是这样的。当然,后退按钮的正常功能是从当前页面返回到上一页。 - Lars Blåsjö
@Lars:是的。所以,如果我在浏览亚马逊并先访问一本书,然后再访问另一本书,我希望返回按钮将我带回第一本书,而不是离开亚马逊网站。亚马逊如何实现他们的页面(使用哈希或其他方式)都不应该有任何影响。这就是问题的全部意义。 - nikow
@noah:也许你应该“教育”一下你的雇主,告诉他们他们的错误:如果我在optaros.com上点击后退按钮,它会将我带回到他们网站上之前访问的子页面,而不是将我带离他们的网站。 - nikow
2
@nikow 现在你只是在恶作剧。谁说过返回按钮会把用户带离该网站?返回按钮只会回到上一页。用户可以区分 Ajax 加载和新页面(如果他们不能,为什么要使用 Ajax?)并且通常不希望 Ajax 加载会导致历史记录条目。 - noah

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