Gmail如何确保无刷新IE返回工作?(How Gmail makes IE Back work w

2019-08-04 18:11发布

Gmail使用#当你在点击邮件区分页面(+ Ajax的动作)。 http://mail.google.com/mail/#inbox/1238e709e37a1394

我发现: 谷歌使用#,而不是搜索? 在URL。 为什么?

在FF或Chrome可以前进和后退没有使用这些URL之间刷新: http://X.com/MyPage.aspx#1 http://X.com/MyPage.aspx#2 http://X.com/ MyPage.aspx#3

但在IE浏览器的页面刷新,并没有经过#时,由后面的动作算PARAMS。

Gmail中如何让奇迹发生?

Answer 1:

我可以给你答案,因为我已经面对和解决这个问题。

有几个概念,首先要明白这里:

  1. JavaScript不能直接改变浏览器历史记录。
  2. 只要在页面变化的iframe的基本URL,历史被更新。 (不过这有一些怪癖不同的浏览器)。
  3. 网址有一个“哈希”部分:例如,在URL http://mail.google.com/mail#inbox#inbox是散列部分。 让我们称之为“哈希”。 所以http://mail.google.com/mail将是我们的“基础URL”。

通过GMail的跟踪历史使用基于这种“散”的招数主要是做。

于是,几个概念:

  1. 当在地址栏中的URL改变了,历史被更新(以前的网址进入历史)
  2. 当基本URL得到改变,重新加载页面。
  3. 当URL的散列部无底座URL变化改变时,页面未重载。

所以,当你从去http://mail.google.com/mail#inboxhttp://mail.google.com/mail#sent ,页面没有得到刷新

现在,如果Gmail是获得一个事件通知时,哈希改变,那么Gmail中可以采取基于该行动。 不幸的是,没有DOM事件,可以帮助我们抓住历史行为。 因此,而不是(这是显示我是如何克服这个问题的部分),我们运行一个无限循环来检查对哈希。 如果观察到的变化,那么我们检测到点击到浏览器的“后退”或“前进”按钮。

在解决这个问题,我做了一个方便的工具:该URL解析器 。 它可以分析得到的散列编码的网址参数,以及PARAMS。 给演示一展身手!

干杯!


关于IE浏览器中的这个问题:我没有意识到,这种“哈希”基础的解决方案不能在IE(可怜的Linux开发)工作。

但是,对于IE浏览器,你可以使用一个隐藏的iframe,并使用其“URL历史的影响”属性来实现的历史。 我知道这种说法缺乏细节,但是从我自身缺乏与IE经验造成的。

我会尝试这个解决方案,并跟进:)

我发现在互联网上的联系,即用做I帧/位置哈希历史的正确实现的主机。 我没有耐心去挖掘在各种浏览器IFRAME接口之间的差异。

我想我会喜欢的jQuery插件 。 YUI有历史的经理了。

干杯!



Answer 2:

这就是我一直在寻找: http://nix.lv/history/demo.html#3

发现它: 保存停泊在历史的IE6



文章来源: How Gmail makes IE Back work without refresh?
标签: ajax http gmail