Angular.js: $location-Problem für dekodierte und unkodierte URLs

Erstellt am 11. Juli 2017  ·  4Kommentare  ·  Quelle: angular/angular.js

Ich reiche ein...

  • [x] Fehlerbericht
  • [ ] Featureanfrage
  • [ ] Sonstiges (Bitte stellen Sie hier keine Supportanfragen (siehe oben))

Aktuelles Verhalten:

Hallo Leute.
Nach einer Diskussion in einer PR, die ich erstellt habe, um einen Fehler im $location-Dienst für URLs zu beheben, der Apostrophe stellen Sie fest, dass

Weitere Informationen finden Sie in der PR. https://github.com/angular/angular.js/pull/16098

Erwartetes / neues Verhalten:
Undekodierte und dekodierte URLs sollten mit dem $location-Dienst funktionieren

Winkelversion: 1.x.

Browser: alle

Noch etwas:

Wie man es repariert

In src/ng/browser.js gibt es eine Funktion fireStateOrUrlChange, die diese Validierung hat

if (lastBrowserUrl === self.url() && prevLastHistoryState === cachedState) {{
Rückkehr;
}
Das Hauptproblem scheint zu sein, dass wir self.url() mit lastBrowserUrl vergleichen, aber lastBrowserUrl kann aus verschiedenen Quellen gesetzt werden, nicht immer mit der gleichen Kodierung/Dekodierung

$location low broken expected use bug

Hilfreichster Kommentar

Wir haben dies teilweise mit dem Browser <a href> behoben, um URLs in einigen Schlüsselbereichen zu normalisieren (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angle/angular.js/commit/2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). Allerdings normalisiert kein Browser alles mit dieser Methode. Um dies wirklich zu beheben, müssten wir die Normalisierung selbst implementieren.

Ich habe einen POC implementiert , um diese Normalisierung manuell

Aus diesen Gründen werden wir dies in den Zustand "wird nicht beheben" versetzen.

Alle 4 Kommentare

@gkalpak meinst du (aus deinem Kommentar ) etwas wie url = urlResolve(url).href innerhalb von $browser.url tun oder alle Anrufe in $browser.url(val) zu ändern, um konsistent zu sein? Das Hinzufügen von urlResolve scheint zu funktionieren, obwohl einige Tests geändert wurden (einige URLs enden jetzt auf / ).

@jbedard , ich habe die Implementierungsdetails nicht

@dmartres können Sie bestätigen, ob dies in 1.7.3 immer noch ein Problem ist? Ich denke, aee7d53a6b5d3d7bc0a1124fd3df9b263777e72e (Behebung # 16592) hat dies möglicherweise behoben?

Wir haben dies teilweise mit dem Browser <a href> behoben, um URLs in einigen Schlüsselbereichen zu normalisieren (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angle/angular.js/commit/2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). Allerdings normalisiert kein Browser alles mit dieser Methode. Um dies wirklich zu beheben, müssten wir die Normalisierung selbst implementieren.

Ich habe einen POC implementiert , um diese Normalisierung manuell

Aus diesen Gründen werden wir dies in den Zustand "wird nicht beheben" versetzen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen