相关疑难解决方法(0)

使用pushState后浏览器中的后退按钮无法正常工作(在Chrome中)

我在JS响应中使用这种类型的行

if (history && history.pushState){
     history.pushState(null, null, '<%=j home_path %>');
}
Run Code Online (Sandbox Code Playgroud)

但是当我back在浏览器中单击时,我会看到响应的JS代码而不是上一页.

有没有办法使后退按钮工作,所以它会重新请求最后一个网址的页面(之前home_path作为pushStated?

更新:

我发现了这个 ..似乎其他人也有同样的问题.. History.js也没有解决它

所以要确认那里的一些评论..这只发生在chrome中

我的想法

我认为所有这些的根源是popstate请求相同类型的pushstate文档(js响应).需要做的是在popstate请求html响应..我只是不知道如何

更多更新:

看到http://railscasts.com/episodes/246-ajax-history-state它提到使用

 $(window).bind("popstate", function() {
      $.getScript(location.href);
    });
Run Code Online (Sandbox Code Playgroud)

这解决了问题,但根据理解jQuery $ .getScript()与 ajax缓存它将添加时间戳..污染网址..关闭它使它不再工作具有相同的效果..

谁知道如何解决这个问题?

更多更新

我在整个interweb中跟踪了问题的踪迹,并以chrome中的一个问题结束,这个问题指向rails问题(然而firefox正常工作)和rails-ujs中问题,不包括响应中的Vary Header

示例可以在这里找到

javascript google-chrome back ruby-on-rails-3 pushstate

26
推荐指数
2
解决办法
1万
查看次数

HTML 5 - Ajax popstate和pushstate

我试图找出如何使用此pushstate和popstate为我的ajax应用程序.我知道有一些插件,但我正在尝试学习如何在它的原始形式中使用它.我也知道在IE中不支持原始格式.除此之外,我需要一些帮助来了解如何使用它.

它的pushstate部分非常简单.现在我有:

function loadForm(var1,var2){ 
    string = "xyz="+var1+"&abc="+var2;
        history.pushState("", "page 1", string);
 }
Run Code Online (Sandbox Code Playgroud)

这会改变我的网址并将其添加到我的网址堆栈中.我有另一个功能,如下所示:

function loadForm2(var1,var2, var3){ 
    string = "xyz="+var1+"&abc="+var2+"&123="+var3;
        history.pushState("", "page 2", string);
}
Run Code Online (Sandbox Code Playgroud)

第二个函数在调用时也会更改url.现在我有那个部分我想弄清楚如何使用popstate.现在我有如下

window.popState = ajax;

function ajax(){
   jQuery.ajax({               
     type: "get",
     url: "../html_form.php",
     data: string,
     dataType: "html",
     success: function(html){
       jQuery('#Right_Content').hide().html(html).fadeIn('slow');
       validate();
       toolTip();   
     }  
   })
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您可以使用两个链接对我的页面进行映像,则一个调用loadForm函数,另一个调用loadForm2函数.当我单击每个链接时,表单通过ajax加载就好了,并且url会按原样更改.当我点击后退按钮时,网址将回滚到上一页的网址,但页面内容会再次加载当前表单而不是之前的表单.当我点击后退按钮时,它正在进行ajax调用(firebug),好像它正在尝试加载前一个表单,但不是运行先前的ajax调用,而是运行当前的ajax调用.所以我的url会回到之前的url,但是加载的表单或调用的ajax调用与最近的页面加载(不是上一页加载)相同.

我不确定我做错了什么,任何帮助都会非常感激.

ajax html5 browser-history history.js pushstate

1
推荐指数
1
解决办法
1万
查看次数