Estou enviando um ...
Comportamento atual:
Oi, pessoal.
Após uma discussão em um PR que criei para corrigir um erro no serviço $ location para url que contém apóstrofos @gkalpak, observe que apóstrofos em potencial em url não são o problema principal, em vez disso, o problema é usar urls decodificados e não decodificados.
veja o PR para mais detalhes. https://github.com/angular/angular.js/pull/16098
Esperado / novo comportamento:
url não decodificado e decodificado deve funcionar usando o serviço $ location
Versão angular: 1.x.
Navegador: todos
Algo mais:
Como corrigi-lo
Em src / ng / browser.js há uma função fireStateOrUrlChange que tem esta validação
if (lastBrowserUrl === self.url () && prevLastHistoryState === cachedState) {{
Retorna;
}
O principal problema parece ser que estamos comparando self.url () com lastBrowserUrl, mas lastBrowserUrl pode ser definido a partir de fontes diferentes, nem sempre com a mesma codificação / decodificação
@gkalpak, você quer dizer (a partir do seu comentário ) fazer algo como url = urlResolve(url).href
dentro de $browser.url
ou alterar todas as chamadas para $browser.url(val)
para ser consistente? Adicionar urlResolve
parece funcionar, embora mude alguns testes (alguns URLs agora terminam em /
).
@jbedard , não pensei nos detalhes da implementação. Eu estava me referindo ao resultado final: sorriso:
@dmartres você pode confirmar se isso ainda é um problema no 1.7.3? Acho que aee7d53a6b5d3d7bc0a1124fd3df9b263777e72e (corrigindo # 16592) pode ter corrigido isso.
Corrigimos isso parcialmente usando o navegador <a href>
para normalizar URLs em algumas áreas principais (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angular / angular.js / commit / 2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). No entanto, nenhum navegador normaliza tudo com este método. Para realmente corrigir isso, precisaríamos implementar a normalização por conta própria.
Implementei um POC para fazer essa normalização manualmente, mas decidimos que essa é uma mudança muito grande neste ponto. FYI 15 dos testados adicionados naquele commit falham atualmente no cromo.
Por essas razões, vamos colocar isso em um estado de "não consertar".
Comentários muito úteis
Corrigimos isso parcialmente usando o navegador
<a href>
para normalizar URLs em algumas áreas principais (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angular / angular.js / commit / 2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). No entanto, nenhum navegador normaliza tudo com este método. Para realmente corrigir isso, precisaríamos implementar a normalização por conta própria.Implementei um POC para fazer essa normalização manualmente, mas decidimos que essa é uma mudança muito grande neste ponto. FYI 15 dos testados adicionados naquele commit falham atualmente no cromo.
Por essas razões, vamos colocar isso em um estado de "não consertar".