5

J'utilise le routage dans Angularjs pour mon SPA mais je dois supporter IE7 (et IE8 en mode de compatibilité IE7). Je veux que l'historique du navigateur fonctionne encore. Je m'en fous si je dois utiliser un plugin jQuery.Prise en charge de l'historique Angularjs pour IE6 et IE7

+6

Les années 90 appelé. Ils veulent leur retour href. –

+0

@DanKanze - Malheureusement ... où je travaille il y a un système interne tellement immergé avec IE7 qu'ils ne peuvent pas mettre à jour au-delà de IE8 avec le mode de compatibilité. –

+0

Oui, ils peuvent. Ils peuvent utiliser IE 7/8 pour l'application héritée, et Chrome ou Firefox pour tout le reste. À moins qu'ils ne boivent le Kool-Aid de Microsoft. Les applications héritées comme celle-ci sont la seule raison d'utiliser IE. Déjà. – iconoclast

Répondre

7

J'ai vérifié à travers la source angulaire sniffer.js, location.js et browser.js pour vérifier la mécanique de la façon dont l'histoire fonctionne. En substance, si le navigateur prend en charge l'historique (c'est-à-dire $sniffer.history est vrai) alors l'API d'historique est utilisée, sinon il écrit simplement location.href (ou locaiton.replace(url)). Consultez $browser.url(url, replace) dans browser.js, ligne 149 pour plus de détails.

Donc, si angulaire est en train d'écrire à location aussi un plugin jquery comme l » BBQBen Alman ramassera cet événement car il est l'interrogation des changements à location.hash. J'ai réussi à ce travail dans IE8 (en mode IE7) simplement y compris hashchange plugin de Ben (un sous-ensemble de barbecue) et un feu d'événement minimum et événement écoute:

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

REMARQUE: jQuery hashchange (et barbecue) est en utilisant obsolète $.browser.msie à ligne 300 donc utilisez plutôt (document.documentMode != undefined) comme suggéré dans les commentaires à l'article de blog de Ben.