我正在JS响应中使用这种类型的行
if (history && history.pushState){
history.pushState(null, null, '<%=j home_path %>');
}
但是,当我在浏览器中点击“后退”时,我看到的是响应的JS代码而不是之前的页面。
有没有办法让返回按钮正常工作,以便它会重新请求上一个URL的页面(在home_path
被推送的之前)?
更新:
我找到了这个..似乎其他人也有同样的问题..历史记录.js也无法解决它
所以为了确认一些评论..这只发生在chrome中
我的想法
我认为所有这些问题的根源是popstate请求与pushstate文档(js响应)相同类型。需要做的是在popstate请求html响应..我只是不知道怎么做
更多更新:
在http://railscasts.com/episodes/246-ajax-history-state中提到要使用
$(window).bind("popstate", function() {
$.getScript(location.href);
});
这解决了问题,但根据了解jQuery $.getScript(),如果没有ajax缓存,它会添加时间戳,这会污染URL,关闭它会使其再次无法正常工作。 有人知道如何解决这个问题吗?更新更多:
我在整个互联网上追踪了问题的足迹,并以Chrome中的一个问题结束,该问题指向Rails问题(Firefox可以正常工作),以及rails-ujs中的问题涉及在响应中未包括Vary标头。
示例可在此处找到。
'<%=j home_path %>'
的结果是哪个字符串? - Simon/home
。 - Nick Ginanto