Angular.js: Masalah $location untuk url yang didekode dan tidak dikodekan

Dibuat pada 11 Jul 2017  ·  4Komentar  ·  Sumber: angular/angular.js

saya sedang mengajukan...

  • [x] laporan bug
  • [ ] permintaan fitur
  • [ ] lainnya (Harap jangan mengirimkan permintaan dukungan di sini (lihat di atas))

Perilaku saat ini:

Halo kawan-kawan.
Setelah diskusi di PR yang saya buat untuk memperbaiki kesalahan dalam layanan $location untuk url yang berisi apostrof @gkalpak perhatikan bahwa

lihat PR untuk lebih jelasnya. https://github.com/angular/angular.js/pull/16098

Perilaku yang diharapkan/baru:
url yang tidak dikodekan dan didekodekan harus berfungsi menggunakan layanan $location

Versi sudut: 1.x.

Peramban: semua

Ada yang lain:

Bagaimana memperbaikinya

Di src/ng/browser.js ada fungsi fireStateOrUrlChange yang memiliki validasi ini

if (lastBrowserUrl === self.url() && prevLastHistoryState === cachedState) {{
kembali;
}
Masalah utama tampaknya adalah bahwa kita membandingkan self.url() dengan lastBrowserUrl, tetapi lastBrowserUrl dapat disetel dari sumber yang berbeda, tidak selalu dengan encoding/decoding yang sama

$location low broken expected use bug

Komentar yang paling membantu

Kami telah memperbaiki sebagian masalah ini menggunakan browser <a href> untuk menormalkan URL di beberapa area utama (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angular/angular.js/commit/2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). Namun tidak ada browser yang menormalkan semuanya dengan metode ini. Untuk benar-benar memperbaikinya, kita perlu menerapkan normalisasi sendiri.

Saya menerapkan POC untuk melakukan normalisasi itu secara manual, namun kami memutuskan ini adalah perubahan yang terlalu besar pada saat ini. FYI 15 dari yang diuji ditambahkan dalam komit itu saat ini gagal di chrome.

Untuk alasan ini kami akan menempatkan ini dalam status "tidak akan diperbaiki".

Semua 4 komentar

@gkalpak maksud Anda (dari komentar Anda ) melakukan sesuatu seperti url = urlResolve(url).href dalam $browser.url atau mengubah semua panggilan ke $browser.url(val) agar konsisten? Menambahkan urlResolve tampaknya berhasil, meskipun mengubah beberapa pengujian (beberapa URL sekarang diakhiri dengan / ).

@jbedard , saya tidak memikirkan detail implementasinya. Saya mengacu pada hasil akhirnya :grin:

@dmartres dapatkah Anda mengonfirmasi jika ini masih menjadi masalah di 1.7.3? Saya pikir aee7d53a6b5d3d7bc0a1124fd3df9b263777e72e (memperbaiki #16592) mungkin telah memperbaiki ini?

Kami telah memperbaiki sebagian masalah ini menggunakan browser <a href> untuk menormalkan URL di beberapa area utama (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angular/angular.js/commit/2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). Namun tidak ada browser yang menormalkan semuanya dengan metode ini. Untuk benar-benar memperbaikinya, kita perlu menerapkan normalisasi sendiri.

Saya menerapkan POC untuk melakukan normalisasi itu secara manual, namun kami memutuskan ini adalah perubahan yang terlalu besar pada saat ini. FYI 15 dari yang diuji ditambahkan dalam komit itu saat ini gagal di chrome.

Untuk alasan ini kami akan menempatkan ini dalam status "tidak akan diperbaiki".

Apakah halaman ini membantu?
0 / 5 - 0 peringkat