Angular.js: デコードされたURLとエンコードされていないURLの$ locationの問題

作成日 2017年07月11日  ·  4コメント  ·  ソース: angular/angular.js

私は提出しています...

  • [x]バグレポート
  • []機能リクエスト
  • []その他(ここでサポートリクエストを送信しないでください(上記を参照))

現在の動作:

こんにちは、みんな。
アポストロフィを含むURLの$ locationサービスのエラーを修正するために作成したPRでの議論の後、 @ gkalpakは、URLの

詳細については、PRを参照してください。 https://github.com/angular/angular.js/pull/16098

期待される/新しい動作:
デコードされていないURLとデコードされたURLは、$ locationサービスを使用して機能する必要があります

Angularバージョン: 1.x。

ブラウザ:すべて

他に何か:

それを修正する方法

src / ng / browser.jsには、この検証を行う関数fireStateOrUrlChangeがあります

if(lastBrowserUrl === self.url()&& prevLastHistoryState === cachedState){{
戻る;
}
主な問題は、self.url()をlastBrowserUrlと比較していることのようですが、lastBrowserUrlは、常に同じエンコーディング/デコーディングであるとは限らず、異なるソースから設定できます。

$location low broken expected use bug

最も参考になるコメント

ブラウザ<a href>を使用してこれを部分的に修正し、いくつかの主要な領域でURLを正規化しました(https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0、https://github.com/ angle / angular.js / commit / 2f72a69ded53a122afad3ec28d91f9bd2f41eb4f)。 ただし、この方法ですべてを正規化するブラウザはありません。 これを本当に修正するには、自分で正規化を実装する必要があります。

その正規化を手動で行うためにPOC

これらの理由から、これを「修正しない」状態にします。

全てのコメント4件

@gkalpakは、(コメントから) url = urlResolve(url).href内で$browser.url url = urlResolve(url).hrefようなことをするか一貫性$browser.url(val)することを意味しますか? urlResolve追加は機能しているようですが、いくつかのテストが変更されています(一部のURLは/終わるようになりました)。

@jbedard 、実装の詳細については考えていませんでした。 私は最終結果を参照していました:grin:

@dmartresこれが1.7.3でもまだ問題であるかどうかを確認できますか? aee7d53a6b5d3d7bc0a1124fd3df9b263777e72e(修正#16592)がこれを修正した可能性があると思いますか?

ブラウザ<a href>を使用してこれを部分的に修正し、いくつかの主要な領域でURLを正規化しました(https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0、https://github.com/ angle / angular.js / commit / 2f72a69ded53a122afad3ec28d91f9bd2f41eb4f)。 ただし、この方法ですべてを正規化するブラウザはありません。 これを本当に修正するには、自分で正規化を実装する必要があります。

その正規化を手動で行うためにPOC

これらの理由から、これを「修正しない」状態にします。

このページは役に立ちましたか?
0 / 5 - 0 評価