在浏览器的后退按钮不使用pushState的后正常工作(在Chrome)(back button i

2019-08-17 13:25发布

我使用这种类型的线在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标头

例如,可以发现这里

Answer 1:

我目前正在玩弄做

 response.headers['Vary'] = 'Accept'

这似乎是解决这个问题,在第一次看。

如果任何人有同样的问题,请检查一下,让我知道



Answer 2:

你需要一个监听器添加到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的所有浏览器。



Answer 3:

这发生在我与西纳特拉和铬。

以解决它:

$.ajaxSetup({ cache: false });


Answer 4:

我测试过使用本地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)