Angularjs对IE6和IE7的历史支持



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

我检查了angular源代码sniffer.jslocation.jsbrowser.js来检查历史记录是如何工作的。本质上,如果浏览器支持历史(即$sniffer.history为真),则使用历史api,否则它只是写入location.href(或locaiton.replace(url))。查看browser.js中的$browser.url(url, replace),第149行了解详细信息。

所以,如果angular只是写location,那么像Ben Alman's BBQ这样的jquery插件会拾取这个事件,因为它正在轮询location.hash的变化。我已经成功地在IE8(在IE7模式下)通过简单地包括Ben的hashchange插件(BBQ的一个子集),然后一个最小的事件火灾和事件监听:

$(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)

最新更新