Internet explorer window.history.back()在iframe中时是否在Internet Explorer中重新加载页面?

Internet explorer window.history.back()在iframe中时是否在Internet Explorer中重新加载页面?,internet-explorer,iframe,back,browser-history,Internet Explorer,Iframe,Back,Browser History,当我的页面位于iframe中时,我注意到Internet Explorer有一种奇怪的行为。调用window.history.back()时,iframe似乎会重新加载自身,即使只有URL中的哈希值应该更改。当页面不在iframe中时,它的行为正常,不会重新加载页面。你知道为什么会发生这种情况以及如何预防吗 我创建了一个小提琴,将在IE9中演示这一点: jsfiddle使用iframe,因此该行为将是iframe行为。单击“#foo”和“#bar”将更改URL中的哈希值。现在单击“返回”链接将

当我的页面位于iframe中时,我注意到Internet Explorer有一种奇怪的行为。调用window.history.back()时,iframe似乎会重新加载自身,即使只有URL中的哈希值应该更改。当页面不在iframe中时,它的行为正常,不会重新加载页面。你知道为什么会发生这种情况以及如何预防吗

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

jsfiddle使用iframe,因此该行为将是iframe行为。单击“#foo”和“#bar”将更改URL中的哈希值。现在单击“返回”链接将触发window.history.BACK()。请注意,执行此操作时,时间戳会更改,这表示页面正在重新加载

或者,如果直接加载iframe:

您会注意到,当单击“上一步”时,时间戳不会更改

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

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

嗯,当我从上下文菜单中选择Back命令时,它也会这样做。在IE10中,您可以使用。恐怕在IE9中,您必须跟踪哈希历史,然后像这样更改它:

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

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

谢谢瓦茨拉夫。但我相信这会在历史堆栈中添加另一个状态,对吗?因此,虽然它可以工作,但它打破了后退/前进状态。这是真的。我将尝试找出另一个解决方案。我有点困惑,但它看起来像是以怪癖模式显示的示例,这可能会导致浏览器历史忽略链接。当我打开时,它会按预期工作。当然,当发生
onhashchange
时,您必须更新时间。检查我的密码:嗨,瓦茨拉夫,你可能误读了我的问题。当在iframe内部时会出现问题。一旦你把你的窗口从iframe(你正在做的)外面拿出来,IE就会正常工作。我需要一个解决方案来防止在iframe中“返回”时加载页面。哦,我的错,对不起。我使用IE10,它在那里工作。在IE9中,它的行为与您描述的一样。我原本以为问题出在别处。这看起来像是IE9和更老版本中的一个bug。我们也被这个bug困扰着:(@Blackbird,你选择了什么解决方法来解决这个问题?没有,很遗憾:(你呢?还没有。我正在考虑构建我自己的历史堆栈,并使用它来代替window.history.back().这有点难看,但我不知道IE有什么解决办法。我也有同样的问题,IE>8似乎也会出现