jquery - jquery.history.js VS jquery-hashchange

标签 jquery html5 history.js hashchange

http://balupton.github.io/jquery-history/demo/
我被jquery.history.js吸引了。
当我发现
http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/
我想第二个只是基于jquery。我的意思是,除了jquery,它不需要任何额外的插件。
jquery.history.js中有什么特别之处?比哈希变化?.
我应该使用哪个来覆盖浏览器的后退和前进按钮?

最佳答案

编辑-2013年末
另一个名为“sammy.js”的哈希库也很流行。它有一个很好的客户端路由图。客户端路由结构用于处理hashchange事件,以便您可以使用它为某些页面提供类似应用程序的功能。有关详细信息,请参见https://github.com/quirkey/sammy/wiki/Presentations
此外,在下面的示例中,几乎不需要使用普通链接。你可以使用按钮,li,任何你想要的Ajax响应链接,只要你能绑定到他们的点击事件。您使用的路由参数可以存储在被单击元素的数据属性中,或者其他可以通过被单击元素识别的地方,例如在javascript字典对象中。点击事件触发后,您可以检索必要的路由值,并使用html5 push状态、jquery bbq push状态、hashbang等。
概述
history.js和jquery bbq库用于在启动Ajax或页面事件时维护状态。您可以使用这些库来存储有关浏览器历史记录的信息&/或者您对URL进行修改,这样您就可以使用页面上的前进和后退按钮进行Ajax调用、选项卡更改、图像浏览,以及任何您想要绑定历史记录日志的内容。两个库的基本用法都有一些相似的API。
历史.js
新的history.js库对pushstate和popstate使用HTML5浏览器标准,如果浏览器不支持HTML5 pushstate,则返回hashchange方法。pushstate允许您将URL推送到浏览器栏=更改URL而不重新加载页面!主存储库https://github.com/browserstate/history.js
使用它,你
(a)包括脚本文件,(b)绑定到“statechange”事件,(c)处理statechange事件,(d)在wnat时触发statechange事件-当用户单击等。
笔记:
每当用户按下向前或向后按钮时,将触发状态更改事件。在bind方法/处理程序中,您将调用一个获取相应状态的方法。(1)
方法/函数history.getstate()可用于根据所推入的页面历史记录从服务器获取数据。您可以在状态对象中存储任何变量。通常您希望存储一个URL。(0)每次有人单击要跟踪其历史记录的(非页面刷新)链接时,都需要填充历史记录状态。
(0)

   $("#navbar").on("click","li[data-ajax-link='true']", function(e) {
        var url = $(this).data('uri');
        var target = $(this).data('target');
        var title = $(this).data('text');
        History.pushState({ url: url, target: target }, title, url);
    });

(1)
History.Adapter.bind(window, 'statechange', function() {
       updateContent(History.getState());
});

(2)
 var updateContent = function(State) {
        var url = State.data.url;
        var $target = $(State.data.target);
        ajaxPost(url, $target);
  };

烧烤
BenAlman的库(即jquery-bbq.js)使用哈希来控制浏览器历史。它完全兼容旧的浏览器(因为hashchange类似于HTML4技术)。
如果决定更改链接的默认行为,则单击链接时,(4)可以截获链接回发,阻止默认操作,然后调用$.bbq.pushstate。这个pushstate方法在散列标记后将内部的项推送到URL中。(5)此URL哈希的更改将调用您绑定到的“hashchange”事件。(5续)在hashchange事件中,您可以使用$.bbq.getstate(“paramname”)在hash之后获取带有“paramname”的lastet paremeter。这很有用,因为浏览器将处理正常历史记录中的哈希值。因此,当sombody向前或向后单击时,它将加载上一个或下一个哈希状态。如果您使用它使您的应用程序大量使用Ajax,那么您将执行Ajax回发,以获取先前放置在哈希中的URL。关于如何使用这个的另一个例子,请看我最近对JQuery BBQ: Where to store URLs?
烧烤历史记录示例用法
(4)
 $("a[data-custom-ajax-link='true']").click(function (e) {
    var target = $(this).data('target');
    var url = $(this).attr('href');
    $.bbq.pushState({ url: url, target: target });
    e.preventDefault();
});

(5)
$(window).bind("hashchange", function(e) {
    var url = $.bbq.getState("url");
    var $target = $($.bbq.getState("target"));
    var frame = $.bbq.getState("target");


    $.ajax({
        url: url,
        data : null,
        type: "POST",
        beforeSend: function (xhr) { xhr.setRequestHeader('X-Target', frame); },
        success: function (data) {
            $target.html(data);
        }
    });


});

请注意,我刚刚介绍了如何使用这些插件的基本知识。您可以使用这些插件来管理带有选项卡、链接或Ajax加载的前向和后向按钮的使用。
至于哪一个“更好”,很难说。History.js在大约5年内完全成熟后将成为更好的库(它仍处于bet a版本,但它对未来是一个很好的选择,请注意其Github站点上大量开放的问题和分支)。jquery BBQ在另一个方面,因为它有3年的历史,还没有为jquery 1.9的遵从性更新。好消息是,它们的实现和特性非常相似,因此在两者之间切换也不算太糟糕。
history.js在未来更加兼容。看看它的API(大约在https://github.com/browserstate/history.js
相比之下,BBQ的API在页面http://benalman.com/code/projects/jquery-bbq/docs/files/jquery-ba-bbq-js.html上。它不仅仅是历史部分。

关于jquery - jquery.history.js VS jquery-hashchange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16980735/

相关文章:

javascript - 脚本影响所有div,我怎样才能让它只影响一个?

php - 在复选框选择上提交表单

html5 - 使用贝塞尔曲线的拼图碎片

javascript - 如何使用 Backbone.js 获得 HTML5 历史记录持久化?

javascript - 使用 History.js 单击后退按钮时恢复内容

javascript - 适用于所有浏览器的弹出框

JQuery Mobile native 选择不适用于机器人

javascript - 使用javascript和html5存储空间搜索大量文本

javascript - 保护用户注册API

jquery - History.js 的 ReplaceState() 不断向 url 添加新的哈希值