见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/