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

Joh*_*ika 6 iframe internet-explorer 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都是一致的.

知道如何防止这种重装吗?

Vác*_*ych 2

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

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

编辑

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