window.history.back()在iframe内部重新加载Internet Explorer中的页面?

时间:2012-06-14 20:19:38

标签: internet-explorer iframe back browser-history

当我的网页位于iframe中时,我注意到Internet Explorer出现了一种奇怪的行为。看来iframe在调用window.history.back()时会自动重新加载,即使只有URL中的哈希值应该改变。当页面不在iframe内部时,它表现正常并且不会重新加载页面。知道为什么会发生这种情况以及如何预防吗?

我创建了一个小提琴,将在IE9中演示:

http://jsfiddle.net/peh96/5/

jsfiddle使用iframe,因此行为将是iframe行为。单击“#foo”和“#bar”将更改URL中的哈希值。现在单击“BACK”链接将触发window.history.back()。请注意,当您这样做时,时间戳会发生变化,表明页面正在重新加载。

或者,如果您直接加载iframe:

http://fiddle.jshell.net/peh96/5/show/

您会注意到点击“返回”时时间戳不会改变。

这只是一个IE问题,因为无论是否在iframe内部,Chrome和Firefox都是一致的。

知道如何防止重新加载吗?

1 个答案:

答案 0 :(得分:2)

好吧,当我从上下文菜单中选择 Back 命令时,它也会这样做。在IE10中,您可以使用HTML5 State Management。我担心在IE9中你必须跟踪哈希历史,而不是像这样改变它:

document.getElementById('back').addEventListener('click', function () {
    window.location.hash = 'abc';
}, false);

修改

那怎么样? 当您致电javascript:window.top.location.hash='bar'时,您可以在父窗口中捕获onhashchange个事件,然后在iframe中调用scrollTo。但这只适用于同一个域。