我正在使用onhashchange
javascript 事件向用户显示一系列“屏幕”,而无需为每个屏幕重新加载页面。将此页面放置在 iFrame 中时,IE9 不会触发 hashchange 事件,并且 window.location.href 不会按预期更新。
我的期望:每当用户点击“继续”进入另一个屏幕时,URL 的哈希部分就会改变。当使用浏览器的后退和前进按钮时,浏览器会更改哈希值。这被 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。