我使用这种类型的线在JS响应
if (history && history.pushState){
history.pushState(null, null, '<%=j home_path %>');
}
但是当我点击back
在浏览器中,我看到的响应,而不是前一页的JS代码。
有没有办法让后退按钮的工作,以便将重新请求的最后一个URL(页面之前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);
});
这解决了根据这个问题,但要理解jQuery的$ .getScript() withtout AJAX缓存将时间戳添加..被污染的URL ..关闭它使得它不具有相同效果又工作..
任何人都知道如何解决呢?
更多最新消息
我找到了问题的步道遍布interweb并与结束问题的铬 ,它指向一个轨道的问题(火狐工作正常不过)和在轨-UJS问题涉及不包括在响应Vary标头
例如,可以发现这里
我目前正在玩弄做
response.headers['Vary'] = 'Accept'
这似乎是解决这个问题,在第一次看。
如果任何人有同样的问题,请检查一下,让我知道
你需要一个监听器添加到popstate事件
window.onpopstate = function(event) {
//load the page
};
当按下后退按钮的URL被改变,然后popstate事件。 这是你的责任,加载在你popstate听众匹配改变URL的细节。
一个很好的例子popstate
有些浏览器火的时候,在第一次加载页面,引起无限页面加载环路一popstate事件。 这可以通过添加以下检查来避免
var loadPage = window.history.state;
window.onpopstate = function(event) {
if (loadPage)
//load the page
};
然后设置loadPage为true时pushState的调用
history.pushState(null, null, '<%=j home_path %>');
loadPage = true;
这种技术在支持HTML5历史API的所有浏览器。
这发生在我与西纳特拉和铬。
以解决它:
$.ajaxSetup({ cache: false });
我测试过使用本地HTML文件,我的浏览器的代码,我已经得到了控制台安全错误:
SecurityError: The operation is insecure.
history.pushState(null, null, '<%=j home_path %>');
我可以看到浏览器如何操纵历史可以被认为是一个潜在的危险行为,所以我想你应该检查,这是不会发生的你。 尝试使用萤火虫的Javascript控制台。 也有可能,有可能是局部的和HTTP之间的行为差异:// HTML文件。
说这话的,什么我见过的最后一个元素history
阵列基本上是当前页面,所以如果你想改变以前的一个,你可以通过使用两个pushState的(做)命令-首先你推一个元素你的愿望,那么你再次按下当前路径。 如果我理解正确你的问题。
文章来源: back button in browser not working properly after using pushState (in Chrome)