浏览器后退按钮的 IE9 中 url 中的哈希更改

Posted

技术标签:

【中文标题】浏览器后退按钮的 IE9 中 url 中的哈希更改【英文标题】:Hash changed in url in IE9 for browser back button 【发布时间】:2013-02-22 08:51:29 【问题描述】:

我正在开发一个 facebook 画布应用程序,并希望使后退、前进和刷新浏览器按钮与我的 ajax 调用一起使用。周围有几个支持此操作的 jquery 插件,例如 jquery.address 或 history.js。

对于 IE9 - 仍然是 html4 - 我不能使用历史 pushState 或 replaceState,因此需要依赖哈希标签。如果我完全拥有一个网站,这很有效,但如果我们遇到像 Facebook 这样的情况,其中 iFrame 与父级 (facebook.com) 位于不同的域中,我会迷路 - 由于相同的来源策略。

我可以使用散列更改设置 parent.location.href,但是当散列更改时,我无法在 iFrame 中接收事件。

在 iFrame 中设置散列在 IE9 中不起作用 - 单击浏览器后退按钮会忽略我在 iFrame 中所做的散列更改。

任何人都看到我做错了什么,或者在 IE9 内部无法通过 Ajax 调用从 iFrame 内部使用浏览器按钮?或者有没有办法从 iFrame 父级接收 hashchange 事件?

谢谢!

【问题讨论】:

【参考方案1】:

我建议捕获退格按钮,大多数人使用该按钮返回,并为 IE 用户只制作特殊的后退按钮,类似于 ie9 的那些,所以他们的直觉会使用这些。

<!--[if lte IE 9]>
   html code for IE users, explaining why they are ignorant... giving them a back button, catching the backspace key and using that....
<![endif]-->

【讨论】:

微笑,我喜欢你的回答!所以这意味着没有机会点击 iFrame 内的浏览器后退/前进/刷新按钮... 这仍然意味着他们可以使用浏览器的后退按钮。但是,如果您捕获退格 ***.com/questions/2353550/…,您可以使用 preventdefault 方法或返回 false,因此它不会执行 history.back(),而是执行您希望它执行的操作。如果你为用户提供你自己的大后退按钮,他们会使用它来导航,希望你可以使用 onunload 事件处理程序来警告用户。 大部分人使用退格键返回?你有任何数据来支持这一点(因为它不符合我的期望)? 我认识的每个人都使用退格键,因为在浏览器上很难找到后退键,或者他们懒得使用笔记本上的触控板。 您可以使用这样的简单跟踪脚本来衡量您自己的统计数据。 jsfiddle.net/xCSbd

以上是关于浏览器后退按钮的 IE9 中 url 中的哈希更改的主要内容,如果未能解决你的问题,请参考以下文章

浏览器后退按钮更改动态 url 参数

使用 jQuery 更改浏览器中的后退按钮功能

更改浏览器中的 URL 而不使用 JavaScript 加载新页面

使用 JavaScript 按下浏览器后退按钮时重定向到 URL

是否可以监听物理 Android 后退按钮的触摸?

哈希路由(hash模式)和历史路由(history模式)的区别