Angular.js: Problème de $location pour les URL décodées et non codées

Créé le 11 juil. 2017  ·  4Commentaires  ·  Source: angular/angular.js

Je soumets un...

  • [x] rapport de bogue
  • [ ] demande de fonctionnalité
  • [ ] autre (Veuillez ne pas soumettre de demandes d'assistance ici (voir ci-dessus))

Comportement actuel :

Salut les gars.
Après une discussion dans un PR que j'ai créé pour corriger une erreur dans le service $location pour l'URL qui contient des apostrophes, @gkalpak remarque que les apostrophes

voir le PR pour plus de détails. https://github.com/angular/angular.js/pull/16098

Comportement attendu / nouveau :
l'URL non décodée et décodée devrait fonctionner avec le service $location

Version angulaire : 1.x.

Navigateur : tous

Rien d'autre:

Comment le réparer

Dans src/ng/browser.js il y a une fonction fireStateOrUrlChange qui a cette validation

if (lastBrowserUrl === self.url() && prevLastHistoryState === cachedState) {{
revenir;
}
Le principal problème semble être que nous comparons self.url() à lastBrowserUrl, mais lastBrowserUrl peut être défini à partir de différentes sources, pas toujours avec le même encodage/décodage

$location low broken expected use bug

Commentaire le plus utile

Nous avons partiellement corrigé ce problème en utilisant le navigateur <a href> pour normaliser les URL dans quelques domaines clés (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angular/angular.js/commit/2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). Cependant aucun navigateur ne normalise tout avec cette méthode. Pour vraiment résoudre ce problème, nous aurions besoin de mettre en œuvre la normalisation nous-mêmes.

J'ai implémenté un POC pour effectuer cette normalisation manuellement, mais nous avons décidé que c'était un changement trop important à ce stade. Pour info, 15 des tests ajoutés dans ce commit échouent actuellement dans Chrome.

Pour ces raisons, nous allons mettre cela dans un état "ne répare pas".

Tous les 4 commentaires

@gkalpak, vous voulez dire (à partir de votre commentaire ) faire quelque chose comme url = urlResolve(url).href dans $browser.url ou changer tous les appels en $browser.url(val) pour être cohérent ? L'ajout du urlResolve semble fonctionner, même si quelques tests ont été modifiés (certaines URL se terminent désormais par / ).

@jbedard , je n'ai pas réfléchi aux détails de l'implémentation. Je parlais du résultat final :grin:

@dmartres pouvez-vous confirmer s'il s'agit toujours d'un problème dans la 1.7.3 ? Je pense que aee7d53a6b5d3d7bc0a1124fd3df9b263777e72e (correction #16592) a peut-être corrigé cela?

Nous avons partiellement corrigé ce problème en utilisant le navigateur <a href> pour normaliser les URL dans quelques domaines clés (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angular/angular.js/commit/2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). Cependant aucun navigateur ne normalise tout avec cette méthode. Pour vraiment résoudre ce problème, nous aurions besoin de mettre en œuvre la normalisation nous-mêmes.

J'ai implémenté un POC pour effectuer cette normalisation manuellement, mais nous avons décidé que c'était un changement trop important à ce stade. Pour info, 15 des tests ajoutés dans ce commit échouent actuellement dans Chrome.

Pour ces raisons, nous allons mettre cela dans un état "ne répare pas".

Cette page vous a été utile?
0 / 5 - 0 notes