我有一个iframe
,其中pushState
被触发,以便为用户提供后退和前进的功能。
这个iframe应用了一些变换,父窗口响应鼠标移动更新perspective-origin
。
在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());
},
答案 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。如果这不起作用,也许您可以查看我在错误报告中引用的示例页面。它可能会让您对自动滚动的本质有一些额外的了解。