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



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

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

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

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

或者,如果直接加载 iframe:

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

您会注意到,单击"返回"时时间戳不会更改。

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

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

好吧,当我从上下文菜单中选择"后退"命令时,它会执行相同的操作。在IE10中,您可以使用HTML5状态管理。恐怕在IE9中,您必须跟踪哈希历史记录,而不是像这样更改它:

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

编辑

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

最新更新