【问题标题】:Angularjs history support for IE6 and IE7Angularjs 对 IE6 和 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 管理人员都认为。期间。

标签: angularjs internet-explorer-7 browser-history hashchange jquery-bbq


【解决方案1】:

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

所以,如果 Angular 只是写入 location,那么像 Ben AlmanBBQ 这样的 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 建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多