iframe中的历史pushState,影响Chrome中的父窗口布局?

时间:2014-11-09 21:07:59

标签: html5 google-chrome iframe browser-history

我有一个iframe,其中pushState被触发,以便为用户提供后退和前进的功能。 这个iframe应用了一些变换,父窗口响应鼠标移动更新perspective-origin

See the page in question

在Safari中一切都很好,但是当使用Chrome浏览历史记录时,父级的布局会发生可怕的破坏。这听起来很疯狂,因为iframe内容不应该影响父窗口的布局

要测试您可以浏览iframe中的几个标签,然后点击浏览器中的后退按钮。 另请注意,如果您转到“人物”标签,并打开任何有图片的人,左上角的“后退”按钮会调用绑定到pop state(furnax.goBack)的相同功能,而不会影响父窗口。

要么这是一个错误,要么浏览历史比我想象的更多。

我希望任何人都有一些见解。


Popstate处理程序:

$(window).on("popstate", function () {
  if (furnax.popStoryEnabled) furnax.goBack();
});

goBack功能:

goBack: function () {
  var myHistory = tempDb.getItem("prev").split(",");
  var to = "";
  if (myHistory != "") {
    to = "#" + document.getElementById(myHistory[myHistory.length - 1]).id;
  } else {
    to = "#" + $(".view").first().attr("id");
  }
  furnax.load(to, "pushright", true);
  myHistory.pop();
  tempDb.setItem("prev", myHistory.toString());
},

1 个答案:

答案 0 :(得分:0)

在OS X 10.10.2上,Chrome 41和Safari 8都发生了这种情况。我不认为问题出在pushState上。我相信发生的事情是,当您更改iframe中的网址时,浏览器会将焦点设置在iframe上并自动滚动文档以显示完整的iframe。

我认为它类似于我在关注CSS转化iframe中的输入时遇到的错误。 Webkit bug #143100,Chromium bug #470891

我不确定您的情况是否有资格作为错误,因为我认为浏览器的目的是为了尽可能地展示重点元素,即使这意味着滚动{{1元素。再说一遍,我不肯定iframe实际上正在接收焦点,它可能是一个不同的问题,只是有一些重叠。

我要尝试的一件事是让流行状态处理程序移动" iPhone"到窗口的中心,只有在完成动画后才更改其URL。如果这不起作用,也许您可​​以查看我在错误报告中引用的示例页面。它可能会让您对自动滚动的本质有一些额外的了解。