Angular.js: Problema de $ ubicación para URL decodificadas y no codificadas

Creado en 11 jul. 2017  ·  4Comentarios  ·  Fuente: angular/angular.js

Estoy enviando un ...

  • [x] informe de errores
  • [ ] solicitud de función
  • [] otro (No envíe solicitudes de soporte aquí (ver arriba))

Comportamiento actual:

Hola tios.
Después de una discusión en un PR que he creado para corregir un error en el servicio $ location para url que contiene apóstrofos, @gkalpak observe que potencialmente los apóstrofos en la url no son el problema principal, sino que el problema es el uso de urls decodificadas y no codificadas.

consulte las relaciones públicas para obtener más detalles. https://github.com/angular/angular.js/pull/16098

Comportamiento esperado / nuevo:
La URL no codificada y decodificada debería funcionar con el servicio $ location

Versión angular: 1.x.

Navegador: todos

Algo más:

Como arreglarlo

En src / ng / browser.js hay una función fireStateOrUrlChange que tiene esta validación

if (lastBrowserUrl === self.url () && prevLastHistoryState === cachedState) {{
regreso;
}
El principal problema parece ser que estamos comparando self.url () con lastBrowserUrl, pero lastBrowserUrl se puede configurar desde diferentes fuentes, no siempre con la misma codificación / decodificación.

$location low broken expected use bug

Comentario más útil

Hemos solucionado parcialmente esto usando el navegador <a href> para normalizar las URL en algunas áreas clave (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angular / angular.js / commit / 2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). Sin embargo, ningún navegador normaliza todo con este método. Para solucionar realmente esto, tendríamos que implementar la normalización nosotros mismos.

Implementé un POC para hacer esa normalización manualmente, sin embargo, decidimos que esto es un cambio demasiado grande en este momento. Para su información, 15 de los agregados probados en ese compromiso actualmente fallan en Chrome.

Por estas razones, vamos a poner esto en un estado de "no arreglar".

Todos 4 comentarios

@gkalpak, ¿ te refieres (de tu comentario ) a hacer algo como url = urlResolve(url).href dentro de $browser.url o cambiar todas las llamadas a $browser.url(val) para que sea coherente? Agregar el urlResolve parece funcionar, aunque cambia algunas pruebas (algunas URL ahora terminan en / ).

@jbedard , no pensé en los detalles de implementación. Me refería al resultado final: sonrisa:

@dmartres, ¿ puede confirmar si esto sigue siendo un problema en 1.7.3? Creo que aee7d53a6b5d3d7bc0a1124fd3df9b263777e72e (arreglando # 16592) puede haber solucionado esto.

Hemos solucionado parcialmente esto usando el navegador <a href> para normalizar las URL en algunas áreas clave (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angular / angular.js / commit / 2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). Sin embargo, ningún navegador normaliza todo con este método. Para solucionar realmente esto, tendríamos que implementar la normalización nosotros mismos.

Implementé un POC para hacer esa normalización manualmente, sin embargo, decidimos que esto es un cambio demasiado grande en este momento. Para su información, 15 de los agregados probados en ese compromiso actualmente fallan en Chrome.

Por estas razones, vamos a poner esto en un estado de "no arreglar".

¿Fue útil esta página
0 / 5 - 0 calificaciones