【问题标题】:Duplicate History enteries using History.pushState in Chrome/Safari在 Chrome/Safari 中使用 History.pushState 复制历史记录
【发布时间】:2013-11-17 18:07:52
【问题描述】:

我在 Chrome 和 Safari 中使用来自 https://github.com/browserstate/history.js/ 的 History.js 时遇到了一个奇怪的问题

如果我点击几个不同的“.node”项目,然后查看我的浏览器历史记录,每次点击都有重复的条目,并且需要两次返回按钮才能返回最后一个“真实”状态。我在其中添加了一个 console.log(id) 并且可以确认该事件仅触发一次。

在 Firefox 中,它按预期工作。我只在 Chrome 和 Safari 中看到重复的历史记录项。

$( "body" ).delegate( ".node" , "click", function(){
    id = $(this).data('id');
    History.pushState({"Foo":"Bar","ID":id}, "Title for "+ id, "/item-"+id);
});

【问题讨论】:

  • 对此有何解决方案?有一个非常相似的问题。似乎是跨浏览器。在 Chrome、FF 和 IE10 中测试

标签: javascript jquery google-chrome history.js


【解决方案1】:

我在 Chrome 中遇到了与此类似的问题(在 IE 和 Firefox 中没有发生),结果发现 pushState 没有添加额外的历史记录条目,但是当我通过 javascript 更改 iframe 上的 src 属性时发生了.

即使它们是从远程站点(在本例中为 Vimeo)加载的,它们也会在后退/前进按钮的历史记录中显示为当前页面的副本,我必须多次单击后退。

我没有对此进行进一步测试,所以我不知道这是否是 iframe 独有的,或者是否可能是由更改任何元素的 src 属性引起的。

【讨论】:

  • 我在 iOS 应用中使用 UIWebView 时遇到了同样的问题。非常烦人。计划通过在点击后退按钮后检查位置是否真的改变来解决它(使用超时)。
  • 我在没有任何 iframe 的情况下遇到了这个问题。我能找到的唯一解决方法是使用window.location = hash 而不是history.pushState(state, title, hash)。这不是最理想的解决方案,但它确实有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
相关资源
最近更新 更多