Perbedaan antara window.location.href, window.location.replace dan window.location.assign

129

Apa perbedaan antara

  1. window.location.href="http://example.com";
  2. window.location.replace("http://example.com");
  3. window.location.assign("http://example.com");

Saya membaca di banyak forum yang window.location.assign()hanya menggantikan riwayat sesi saat ini dan karenanya tombol kembali browser tidak akan berfungsi. Namun, saya tidak dapat mereproduksi ini.

function fnSetVariable() {
    //window.location.href = "http://example.com";
    window.location.replace("http://example.com");
    //window.location.assign("http://example.com");
}

<a onmouseover="fnSetVariable();" 
   href="PageCachingByParam.aspx?id=12" >
   CLICK 
</a>
milan_9211
sumber
1
Anda dapat melihat posting yang lebih lama di url: stackoverflow.com/questions/1865837/… semoga bermanfaat
Berikut penjelasan yang lebih baik: stackoverflow.com/a/847130/96656
Mathias Bynens

Jawaban:

165

Ini melakukan hal yang sama:

window.location.assign(url);
window.location = url;
window.location.href = url;

Mereka cukup menavigasi ke URL baru. The replacemetode pada menavigasi sisi lain untuk URL tanpa menambahkan catatan baru untuk sejarah.

Jadi, apa yang Anda baca dalam berbagai bentuk itu tidak benar. The assignMetode tidak menambahkan catatan baru untuk sejarah.

Referensi: http://developer.mozilla.org/en/window.location

Guffa
sumber
1
Terima kasih banyak atas jawabannya. Itu sangat membantu saya untuk menyelesaikan masalah tombol kembali browser.
santosh kumar patro
@ Blunderboy: Bagaimanapun, ini adalah jawaban teratas dengan tanah longsor, jadi itu tidak akan mengubah apa pun.
BoltClock
Jadi apa gunanya assign()? Dari jawaban ini, dan dokumennya, kedengarannya identik dengan location = ....
Mitya
11

Bagian tentang tidak dapat menggunakan tombol Kembali adalah salah tafsir yang umum. window.location.replace (URL) membuang entri SATU teratas dari daftar riwayat halaman, dengan menimpanya dengan entri baru, sehingga pengguna tidak dapat dengan mudah kembali ke SATU halaman web tertentu. Fungsi ini TIDAK menghapus seluruh daftar riwayat halaman, juga tidak membuat tombol Kembali sepenuhnya tidak berfungsi.

(NO fungsi atau kombinasi parameter yang saya tahu perubahan dapat atau menimpa entri daftar sejarah yang Anda tidak memiliki benar-benar pasti - browser umumnya impelement batasan keamanan ini hanya bahkan tidak mendefinisikan operasi apapun bahwa kekuatan sama sekali mempengaruhi entri selain yang teratas di daftar riwayat halaman. Saya ngeri memikirkan hal-hal pengecut apa yang mungkin dilakukan malware jika fungsi seperti itu ada.)

Jika Anda benar-benar ingin membuat tombol Kembali tidak berfungsi (mungkin tidak "ramah pengguna": pikirkan lagi apakah itu yang benar - benar ingin Anda lakukan), "buka" jendela baru. (Anda dapat "membuka" munculan yang bahkan tidak memiliki tombol "Kembali" ... tetapi munculan tidak begitu populer akhir-akhir ini :-) Jika Anda ingin tetap menampilkan laman Anda apa pun yang dilakukan pengguna ( sekali lagi "keramahan pengguna" dipertanyakan), atur penangan window.onunload yang hanya memuat ulang halaman Anda lagi bersih dari awal setiap saat.

Chuck Kollars
sumber
4
'TIDAK ADA fungsi atau kombinasi parameter yang saya tahu dapat mengubah atau menimpa entri daftar riwayat' ... Selamat datang di HTML5
SpYk3HH
6
Ketidakmampuan untuk mengubah atau menimpa entri riwayat browser yang tidak Anda miliki adalah aturan keamanan yang sudah ada sejak lama. HTML5 hanya melanjutkan aturan itu.
Chuck Kollars
Anda melewatkan intinya atau sarkasme. Cari html5 dan riwayat
SpYk3HH