5

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

+6

90-х годов называется. Они хотят, чтобы их хреф вернулся. –

+0

@DanKanze - К сожалению .. где я работаю, есть внутренняя система, настолько погруженная в IE7, что они не могут обновляться за IE8 в режиме совместимости. –

+0

Да, они могут. Они могут использовать IE 7/8 для устаревшего приложения, а также Chrome или Firefox для всего остального. Если они не пьют Microsoft Kool-Aid. Унаследованные приложения, подобные этому, являются единственной причиной использования IE. Когда-либо. – iconoclast

ответ

7

Я проверил через угловой источник sniffer.js, location.js и browser.js проверить механику того, как история работает. В сущности, если браузер поддерживает историю (т. Е. $sniffer.history), то используется история api, иначе она просто записывается в location.href (или locaiton.replace(url)). Ознакомьтесь с $browser.url(url, replace) в browser.js, строка 149 для получения более подробной информации.

Итак, если угловой просто пишет location то JQuery плагин как Ben Alman «s BBQ подберет это событие, потому что это опрос для изменения location.hash. Я успешно получил эту работу в IE8 (в режиме IE7), просто включая Бена 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 (и барбекю) является используя устаревший $.browser.msie по адресу строка 300 поэтому вместо этого используйте (document.documentMode != undefined), как это предложено в комментариях к сообщению в блоге Бена.