使用浏览器的后退按钮时,IE9不会更新iFrame中的window.location.href。解决方法?

时间:2011-12-30 20:50:45

标签: javascript iframe internet-explorer-9 hashchange

我正在使用onhashchange javascript事件向用户显示一系列“屏幕”,而不会为每个屏幕重新加载页面。将此页面放在iFrame中时,IE9不会触发hashchange事件,并且window.location.href未按预期更新。

我的期望:每当用户点击“继续”进入另一个屏幕时,网址的哈希部分就会发生变化。使用浏览器的后退和前进按钮时,浏览器会更改哈希值。这是由javascript中的onhashchange事件处理程序捕获的,并显示正确的内容。

我观察到的内容:支持onhashchange事件(包括IE9)的所有浏览器中的行为都符合预期。但是,当有问题的页面加载到iFrame中时,IE9中的行为会发生变化。当我在IE9中单击浏览器的后退按钮时会发生以下情况:

  • 没有触发hashchange事件。
  • window.location.href和window.location.hash保持与单击后退按钮之前相同
  • 如果我右键单击iFrame并查看iFrame的属性,则会显示带有更改的哈希的URL。即属性窗口中的URL与window.location.href
  • 不匹配

玩具示例:由于其他人报告没有看到此行为,我在此处创建了一个玩具示例:http://jonemo.de/stuff/ie9iframe/test.html。点击state1,然后点击state2,点击浏览器的后退按钮。 Current state of iFrame应该是state1,但在我的IE9中,它会在这一系列操作后读取state2。我的IE版本是9.0.8112.16421,这是正常的发行版本。

如何检测IE9中iFrame内页面上后退按钮的使用?包含iFrame和iFrame内部的页面可以位于不同的域中。我可以完全控制iFrame中的页面,并可以在包含iFrame的页面上放置任意Javascript。

1 个答案:

答案 0 :(得分:0)

window.location.href更新对我来说非常好。如果您从iframe外部访问,确定要访问iframe.contentWindow.location.href吗?