Поддержка истории Angularjs для IE6 и IE7

Я использую маршрутизацию в Angularjs для своего SPA, но мне необходимо поддерживать IE7 (и IE8 в режиме совместимости с IE7). Я хочу, чтобы история браузера все еще работала. Мне все равно, придется ли мне использовать плагин jQuery.


person Scotty.NET    schedule 20.06.2013    source источник
comment
Звонили 90-е. Они хотят вернуть свой href.   -  person Dan Kanze    schedule 20.06.2013
comment
@DanKanze - К сожалению ... там, где я работаю, внутренняя система настолько погружена в IE7, что они не могут обновиться за пределы IE8 в режиме совместимости.   -  person Scotty.NET    schedule 20.06.2013
comment
Да, они могут. Они могут использовать IE 7/8 для устаревшего приложения и Chrome или Firefox для всего остального. Если только они не пьют Kool-Aid от Microsoft. Подобные устаревшие приложения — единственная причина использовать IE. Всегда.   -  person iconoclast    schedule 26.11.2014
comment
@iconoclast - я полностью согласен и придерживаюсь этой позиции, где это возможно. Не все ИТ-менеджеры так думают, но постепенно мир меняется к лучшему.   -  person Scotty.NET    schedule 26.11.2014
comment
Не все ИТ-руководители думают. Период.   -  person iconoclast    schedule 26.11.2014


Ответы (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), как это предлагается в комментариях к сообщению в блоге Бена.

person Scotty.NET    schedule 20.06.2013