我在SPA中使用路由( Angularjs
),但我必须支持IE7 (以及IE7兼容性模式下的IE8 )。不过,我希望浏览器历史仍然有效。我不在乎我是否需要使用jQuery插件。
发布于 2013-06-20 11:01:20
我检查了角源sniffer.js,location.js和browser.js来检查历史是如何工作的。本质上,如果浏览器支持历史记录(即$sniffer.history
为真),则使用历史api,否则只需将其写入location.href
(或locaiton.replace(url)
)。查看$browser.url(url, replace)
in browser.js,第149行获得详细信息。
所以,如果角只是在写location
,那么像Ben Alman的BBQ这样的jquery插件就会接收到这个事件,因为它正在轮询对location.hash的更改。我已经成功地在IE8 ( IE7模式下)实现了这个功能,方法是简单地包括BBQ的一个子集BBQ的hashchange plugin,然后最小的事件触发和事件侦听:
$(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博客文章的评论中所建议的那样。
https://stackoverflow.com/questions/17211947
复制相似问题