Sto utilizzando il routing in Angularjs
per la mia SPA ma devo supportare IE7 (e IE8 in modalità di compatibilità IE7). Voglio che la cronologia del browser continui a funzionare comunque. Non mi interessa se devo usare un plugin jQuery.Supporto della cronologia di Angularjs per IE6 e IE7
risposta
Ho controllato attraverso la sorgente angolare sniffer.js, location.js e browser.js per controllare il meccanismo di come funziona storia. In sostanza se il browser supporta la cronologia (ad esempio, $sniffer.history
è true) viene utilizzata la cronologia, altrimenti scrive semplicemente su location.href
(o locaiton.replace(url)
). Controlla $browser.url(url, replace)
in browser.js, riga 149 per dettagli.
Quindi, se angolare è appena iscritto a location
poi un plugin jQuery come Ben Alman s' BBQ prenderanno questo evento, perché è il polling per le modifiche al location.hash. Ho avuto successo questo lavoro in IE8 (in modalità IE7) semplicemente includendo di Ben hashchange plugin (un sottoinsieme di barbecue) e poi un minimo di fuoco evento e l'evento di ascolto:
$(function() {
$(window).hashchange(function() {
// don't delete this empty handler or ie6/7 history won't work.
});
// call hashchange on first load
$(window).hashchange();
});
NOTA: jQuery hashchange (e barbecue) è utilizzando deprecato $.browser.msie
a riga 300, quindi utilizzare (document.documentMode != undefined)
come suggerito nei commenti al post del blog di Ben.
Gli anni '90 hanno chiamato. Vogliono che il loro href sia tornato. –
@DanKanze - Purtroppo ... dove lavoro c'è un sistema interno così immerso con IE7 che non è possibile effettuare l'aggiornamento oltre a IE8 con la modalità compatibilità. –
Sì, possono. Possono utilizzare IE 7/8 per l'app precedente e Chrome o Firefox per tutto il resto. A meno che non stiano bevendo il Kool-Aid di Microsoft. Le app legacy come questa sono l'unica ragione per utilizzare IE. Mai. – iconoclast