Angularjs历史支持IE6和IE7

Sco*_*NET 5 internet-explorer-7 browser-history hashchange jquery-bbq angularjs

我正在为我的SPA 使用路由,Angularjs但我必须支持IE7(和IE7在IE7兼容模式下).我希望浏览器历史记录仍然可用.我不在乎是否必须使用jQuery插件.

Sco*_*NET 7

我检查了角度源sniffer.js,location.jsbrowser.js,以检查历史记录的工作原理.本质上,如果浏览器支持历史(即为$sniffer.history真),则使用历史api,否则它只是写入location.href(或locaiton.replace(url)).看看$browser.url(url, replace)browser.js,详情线149.

因此,如果angular只是写入,location那么像Ben AlmanBBQ这样的jquery插件将会接收此事件,因为它正在轮询更改location.hash.我已成功通过简单地包含Ben的hashchange插件(BBQ的一个子集)以及最小事件fire和事件监听来在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();
});
Run Code Online (Sandbox Code Playgroud)

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