Angularjs 对 IE6 和 IE7 的历史支持

Posted

技术标签:

【中文标题】Angularjs 对 IE6 和 IE7 的历史支持【英文标题】:Angularjs history support for IE6 and IE7 【发布时间】:2013-06-17 05:02:18 【问题描述】:

我在Angularjs 中为我的 SPA 使用 routing,但我必须支持 IE7(以及 IE7 兼容模式下的 IE8)。我希望浏览器历史记录仍然有效。我不在乎是否必须使用 jQuery 插件。

【问题讨论】:

90 年代被称为。他们希望自己的 href 回来。 @DanKanze - 可悲的是.. 我工作的地方有一个内部系统如此沉浸在 IE7 中,以至于他们无法使用兼容模式升级到 IE8 以上。 是的,他们可以。他们可以将 IE 7/8 用于旧版应用程序,并将 Chrome 或 Firefox 用于其他所有应用程序。除非他们在喝微软的 Kool-Aid。像这样的遗留应用程序是使用 IE 的唯一原因。永远。 @iconoclast - 我完全同意并尽可能采取这种立场。并非所有 IT 管理人员都这么认为,但慢慢地,世界正在变得更好。 并非所有 IT 管理人员都认为。期间。 【参考方案1】:

我检查了角度源 sniffer.jslocation.jsbrowser.js 以检查历史记录的运作机制.本质上,如果浏览器支持历史记录(即$sniffer.history 为真),则使用历史记录 API,否则它只是写入location.href(或locaiton.replace(url))。详情请查看 browser.js 第 149 行中的 $browser.url(url, replace)

所以,如果 Angular 只是写入 location,那么像 Ben Alman 的 BBQ 这样的 jquery 插件将接收此事件,因为它正在轮询 location.hash 的更改。通过简单地包含 Ben 的 hashchange plugin(BBQ 的一个子集),然后是最小的事件触发和事件监听,我已经成功地在 IE8(在 IE7 模式下)中工作了:

$(function () 
  $(window).hashchange(function() 
    // don't delete this empty handler or ie6/7 history won't work.
  );
  // call hashchange on first load
  $(window).hashchange();
);

注意:jQuery hashchange(和 BBQ)在 第 300 行 使用已弃用的 $.browser.msie,因此请改用 (document.documentMode != undefined),如 Ben 的博客文章中的 cmets 建议。

【讨论】:

以上是关于Angularjs 对 IE6 和 IE7 的历史支持的主要内容,如果未能解决你的问题,请参考以下文章

CSS兼容IE6,IE7,FF的技巧

css浏览器兼容问题

IE6 (IE7) 上的 JSON

IE6和IE7之间的浏览器兼容性

在 IE7 和 IE6 中使用带有 localStorage 的骨干网的最佳实践是啥?

第1版,IE6和IE7