Я использую маршрутизацию в Angularjs
для своего SPA, но мне необходимо поддерживать IE7 (и IE8 в режиме совместимости с IE7). Я хочу, чтобы история браузера все еще работала. Мне все равно, придется ли мне использовать плагин jQuery.
Поддержка истории Angularjs для IE6 и IE7
Ответы (1)
Я проверил источник angular sniffer.js, location.js и browser.js, чтобы проверить механизм работы истории. По сути, если браузер поддерживает историю (т.е. $sniffer.history
верно), то используется History API, иначе он просто записывает в location.href
(или locaiton.replace(url)
). Подробнее см. $browser.url(url, replace)
в browser.js, строка 149.
Таким образом, если angular просто пишет в location
, тогда подключаемый модуль jquery, такой как Ben Alman, BBQ подхватит это событие, потому что он опрашивает изменения в location.hash. Я успешно заработал в IE8 (в режиме IE7), просто включив плагин 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) использует устаревший $.browser.msie
в строке 300, поэтому вместо этого используйте (document.documentMode != undefined)
, как это предлагается в комментариях к сообщению в блоге Бена.