Angularjs历史支持IE6和IE7

时间:2013-06-20 11:01:21

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

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

1 个答案:

答案 0 :(得分:7)

我检查了角度来源 sniffer.js location.js browser.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 ,因此请根据Ben博客帖子的评论中的建议使用(document.documentMode != undefined)

相关问题