草庐IT

jquery - jquery.history.js VS jquery-hashchange

coder 2023-08-01 原文

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/

有关jquery - jquery.history.js VS jquery-hashchange的更多相关文章

  1. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  2. jquery - 如何将 AJAX 变量从 jQuery 传递到他们的 Controller ? - 2

    我有一个电子邮件表格。但是我正在制作一个测试电子邮件表单,用户可以在其中添加一个唯一的电子邮件,并让电子邮件测试将其发送到该特定电子邮件。为了简单起见,我决定让测试电子邮件通过ajax执行,并将整个内容粘贴到另一个电子邮件表单中。我不知道如何将变量从我的HAML发送到我的Controllernew.html.haml-form_tagadmin_email_blast_pathdoSubject%br=text_field_tag'subject',:class=>"mass_email_subject"%brBody%br=text_area_tag'message','',:nam

  3. jquery - 如何在 rails 3.1 上安装 jQuery - 2

    我以为它已经安装了,但在我的gemfile中有gem"jquery-rails"但是在我的asset/javascripts文件夹中accounts.js.coffeeapplication.js都被注释掉了这是我的虚拟railsapplication但是在源代码中没有jQuery并且删除链接不起作用......任何想法都丢失了 最佳答案 看看thisRailscast.您可能需要检查application.js文件并确保它包含以下语句。//=requirejquery//=requirejquery_ujs

  4. jquery - Rails 如何创建 Jquery flash 消息而不是默认的 Rails 消息 - 2

    我想在页面顶部创建自定义Jquery消息而不是标准RailsFlash消息。我想在我的投票底部附近创建一条即时消息。我的Controller:defvote_up@post=Post.find(params[:id])current_user.up_vote(@post)flash[:message]='Thanksforvoting!'redirect_to(root_path,:notice=>'Takforditindlæg,deternuonline!')rescueMakeVoteable::Exceptions::AlreadyVotedErrorflash[:error]

  5. javascript - jQuery 的 jquery-1.10.2.min.map 正在触发 404(未找到) - 2

    我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文

  6. jquery - 在 Rails 中从原型(prototype)切换到 jquery,助手呢? - 2

    我目前从prototype切换到jquery主要是为了支持简单的ajax文件上传。我使用:https://github.com/indirect/jquery-rails95%的javascript代码是由railshelper编写的,例如:-remote_function-render:updatedo|page|-page.replace_html'id',:partial=>'content'-page['form']['name']=something-page.visual_effect:highlight,'head_success'...我知道我必须为Jquery重写5%

  7. jquery - Ruby 1.9.1、Rails 2.3.2 和 jrails 0.4 出现 "rescue in const_missing"错误 - 2

    我最近开始了一个项目,团队决定我们希望使用jQuery而不是Prototype/Scriptaculous来满足我们的javascript需求。我们设置了我们的项目,并开始切换。插件已安装viatheseinstructions,一切都按计划进行。不久之后,当尝试运行“./script/server”时,我们收到以下错误:=>Rails2.3.2applicationstartingonhttp://0.0.0.0:3000/usr/local/lib/ruby/gems/1.9.1/gems/activesupport-2.3.2/lib/active_support/depende

  8. jquery - 使用 Rails 3 学习 Ajax 的资源 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。有没有学习Ajax(jQuery)和Rails3的好资源?

  9. jquery - Sprockets::FileNotFound - 找不到文件 'jquery.ui' - 2

    这个问题已经被问过几次了,但我尝试了提供的解决方案,但仍然没有帮助,所以我提出了一个新问题。gem文件gem'jquery-ui-rails'按照建议,我将gem放在:assets组之外Application.css~*=require_self*=requirejquery.ui*=requirebootstrap-datepicker*=requirejquery.timepicker*=require_tree.*/RailsAssetPipeline根据列出的顺序加载Assets。在这里,我把它排在列表的第2位。Application.css.scss*=require_sel

  10. jquery - 'jquery-rails' 和 'jquery-ui-rails' 可以在一个项目下管理吗? - 2

    我有一个Rails应用,使用Rails5.1.6和ruby2.3.5p376我的Gemfile中有这两个gemgem'jquery-rails','~>4.3.3'gem'jquery-ui-rails','~>6.0.1'在show.html.erb中我有以下内容:$(function(){$("#datepicker").datepicker();});Date:在application.js中//=requirejquery-ui//=requirejquery//=requirerails-ujs//=requireturbolinks//=require_tree.在appl

随机推荐