5

Używam routing w Angularjs dla mojego SPA, ale muszę obsługiwać IE7 (i IE8 w trybie zgodności IE7). Chcę, aby historia przeglądarki nadal działała. Nie obchodzi mnie, czy muszę używać wtyczki jQuery.Obsługa historii Angularów dla IE6 i IE7

+6

Dzwonili lat 90. Chcą powrotu ich hrefa. –

+0

@DanKanze - Niestety ... gdzie pracuję, istnieje wewnętrzny system tak zanurzony w IE7, że nie można go zaktualizować poza IE8 w trybie zgodności. –

+0

Tak, mogą. Mogą używać IE 7/8 dla starszej aplikacji oraz Chrome lub Firefox dla wszystkich pozostałych. Chyba że pili Microsoft Kool-Aid. Starsze aplikacje, takie jak ten, są jedynym powodem korzystania z IE. Zawsze. – iconoclast

Odpowiedz

7

Sprawdziłem przez kątowego źródła sniffer.js, location.js i browser.js sprawdzić mechanikę jak historia działa. Zasadniczo, jeśli przeglądarka obsługuje historię (tj. $sniffer.history jest prawdą), używana jest historia api, inaczej po prostu zapisuje się do location.href (lub locaiton.replace(url)). Aby uzyskać szczegółowe informacje, sprawdź numer $browser.url(url, replace) w przeglądarce browser.js, wiersz 149.

Tak więc, jeśli kątowe jest tylko pisanie do location następnie plugin jquery jak Ben Alman „s BBQ odbierze to wydarzenie, ponieważ jest odpytywanie do zmiany location.hash. I z powodzeniem dostał tę pracę w IE8 (w trybie IE7), po prostu w tym Bena hashchange plugin (podzbiór grill), a następnie minimalny ogień zdarzeń oraz zdarzeń słuchanie:

$(function() { 
    $(window).hashchange(function() { 
    // don't delete this empty handler or ie6/7 history won't work. 
    }); 
    // call hashchange on first load 
    $(window).hashchange(); 
}); 

UWAGA: jQuery hashchange (i grill) jest używając przestarzałej $.browser.msie przy linii 300, więc zamiast tego użyj (document.documentMode != undefined) zgodnie z sugestiami w komentarzach do posta na blogu Bena.