我在Angularjs
中使用路由用于我的SPA,但我必须支持IE7(和IE8在IE7兼容模式下)。我希望浏览器历史记录仍然可以工作。我不在乎是否需要使用jQuery插件
我检查了angular源代码sniffer.js、location.js和browser.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)
。