我正在为我的 SPA 使用路由,Angularjs
但我必须支持 IE7(以及 IE7 兼容模式下的 IE8)。我希望浏览器历史记录仍然有效。我不在乎是否必须使用 jQuery 插件。
问问题
3108 次
1 回答
7
我检查了角度源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的BBQ这样的 jquery 插件将接收此事件,因为它正在轮询 location.hash 的更改。通过简单地包括 Ben 的hashchange 插件(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)$.browser.msie
在第 300 行(document.documentMode != undefined)
已弃用,因此请按照 Ben 博客文章评论中的建议使用。
于 2013-06-20T11:01:20.510 回答