Perbedaan antara window.location.href = window.location.href dan window.location.reload ()

196

Apa perbedaan antara JavaScript?

window.location.href = window.location.href

dan

window.location.reload()

fungsi?

Brian
sumber

Jawaban:

247

Jika saya ingat benar, window.location.reload()muat ulang halaman saat ini dengan data POST, sementara window.location.href=window.location.hrefitu tidak termasuk data POST.

Sebagaimana dicatat oleh @ W3Max dalam komentar di bawah, window.location.href=window.location.hreftidak akan memuat ulang halaman jika ada jangkar (#) di URL - Anda harus menggunakan window.location.reload()dalam hal ini.

Juga, seperti dicatat oleh @Mic di bawah ini, window.location.reload()mengambil argumen tambahan skipCachesehingga dengan menggunakan window.location.reload(true)browser akan melewati cache dan memuat kembali halaman dari server. window.location.reload(false)akan melakukan yang sebaliknya, dan memuat halaman dari cache jika memungkinkan.

David Johnstone
sumber
11
perhatikan bahwa ketika Anda menggunakan window.location.reload () pada POST, browser akan menanyakan apakah Anda ingin mengirim ulang data untuk memuat ulang halaman
wimh
3
@ Wimmel, apakah ada cara untuk menonaktifkan pesan ini?
Kris-I
40
window.location.href = window.location.href tidak akan memuat ulang halaman jika ada anchor (#) di URL - Anda harus menggunakan window.location.reload () dalam kasus ini.
W3Max
5
Perhatikan juga bahwa location.reload () juga akan memaksa memuat ulang semua konten statis (seperti hard drive gaya ctrl + f5) sedangkan pengaturan location.href kembali ke href (atau pathname atau URL) tidak, yang bisa menjadi signifikan (dan tidak perlu) perbedaan waktu buka pada beberapa halaman.
Rob Van Dam
2
@Wimmel Chrome: memuat ulang halaman dengan GET Firefox: menjalankan kembali permintaan sebelumnya, artinya jika itu POST, Anda akan mendapatkan popup yang bagus yang menanyakan apakah akan mengirim ulang data atau tidak
Juri
51

Jika Anda mengatakan window.location.reload(true)browser akan melewati cache dan memuat kembali halaman dari server. window.location.reload(false)akan melakukan yang sebaliknya.

Catatan: defaultnilai untuk window.location.reload()adalahfalse

Mik
sumber
5
@Ismail - Defaultnya salah.
Trevor
2
Google Chrome 32, saat menggunakan webRTC yang benar / salah tidak bekerja untuk saya. Saya punya iframe dengan webRTC dan hanya menggunakan window.location.href = window.location.hreftrik.
Jika Anda telah membuat perubahan pada formulir di halaman, perubahan itu mungkin hilang (kembali ke nilai yang di-cache) tergantung pada browser saat menggunakan location.reload()atau location.reload(false). Untuk melakukan penyegaran lengkap halaman, gunakan location.reload(true).
Suncat2000
32

Perbedaannya adalah itu

window.location = document.URL;

tidak akan memuat ulang halaman jika ada hash (#) di URL (dengan atau tanpa sesuatu setelahnya), sedangkan

window.location.reload();

akan memuat ulang halaman.

Fabien Ménager
sumber
2
Tidak semua browser mengalami masalah ini dengan mengakhiri hases. Jika akhir hash menjadi perhatian Anda, coba: window.location = document.URL.replace (/ # $ /, '');
Walter Stabosz
1
Setidaknya Chrome khawatir. Saya biasa menerima location.href = location.hrefbegitu saja, tetapi saya hanya memperhatikan perilaku yang tepat dan datang ke SO untuk menyebarkan berita. Cukup gunakan location.reload()saja.
Pioul
1
Anda juga dapat menggunakan window.location.pathname daripada menulis ekspresi reguler seperti itu. Sebagai contoh:window.location.replace(window.location.pathname);
Arseny
20

Jika Anda menambahkan boolean true ke ulang window.location.reload(true) ia akan memuat dari server.

Tidak jelas seberapa didukung boolean ini, W3Org menyebutkan bahwa NS dulu mendukung itu

Mungkin ada perbedaan antara konten window.location.href dan document.URL - setidaknya ada perbedaan antara location.href dan dokumen.lokasi yang tidak standar dan usang. yang ada hubungannya dengan pengalihan, tapi itu benar-benar milenium terakhir.

Untuk keperluan dokumentasi saya akan menggunakan window.location.reload () karena itulah yang ingin Anda lakukan.

mplungjan
sumber
Lihatlah stackoverflow.com/a/5091619/429972 karena ini menjelaskan perbedaannya.
jontro
14

Seperti dikatakan, memodifikasi href ketika ada hash (#) di url tidak akan memuat ulang halaman. Jadi, saya menggunakan ini untuk memuatnya alih-alih ekspresi reguler:

if (!window.location.hash) {
    window.location.href = window.location.href;
} else {
    window.location.reload();
}
lebih rendah
sumber
6

Datang di pertanyaan ini meneliti beberapa perilaku menyimpang di IE, khususnya IE9, tidak memeriksa versi yang lebih lama. Kelihatannya

window.location.reload();

menghasilkan penyegaran yang mengosongkan seluruh layar selama satu detik, di mana sebagai

 window.location = document.URL;

menyegarkan halaman lebih cepat, hampir tanpa terasa.

Melakukan sedikit riset lebih lanjut, dan beberapa eksperimen dengan fiddler, tampaknya window.location.reload()akan mem-bypass cache dan memuat ulang dari server terlepas dari apakah Anda lulus boolean dengan itu atau tidak, ini termasuk mendapatkan semua aset Anda (gambar, skrip, style sheet, dll) lagi. Jadi, jika Anda hanya ingin halaman me-refresh HTML, halaman window.location = document.URLakan kembali lebih cepat dan lebih sedikit lalu lintas.

Perbedaan perilaku antara browser adalah bahwa ketika IE9 menggunakan metode reload, ia membersihkan halaman yang terlihat dan tampaknya membangunnya kembali dari awal, di mana FF dan chrome menunggu sampai mereka mendapatkan aset baru dan membangunnya kembali jika berbeda.

invertedSpear
sumber
window.location = document.URL memuat kembali halaman seperti window.location.reload (). Apakah ada keadaan seni untuk menyegarkan tanpa menggulir kembali ke atas, atau tanpa terasa seperti yang Anda katakan?
bigmugcup
6

Perbedaan dalam Firefox (12.0) adalah bahwa pada halaman yang diberikan dari POST, reload () akan memunculkan peringatan dan melakukan posting ulang, sementara tugas URL akan melakukan GET.

Google Chrome melakukan GET untuk keduanya.

mrj
sumber
1
Chrome 38 sekarang tampaknya menggunakan POST untuk .reload ().
Glen Little
3

Menggunakan JSF, saya sekarang mengalami masalah dengan penyegaran setelah sesi kedaluwarsa: PrimeFaces ViewExpiredException setelah pemuatan ulang halaman dan dengan beberapa penyelidikan saya menemukan satu perbedaan di FireFox:

Memanggil window.location.reload()berfungsi seperti mengklik ikon segarkan di FF, itu menambah garis

Cache-Control max-age=0

saat pengaturan window.location.href berfungsi seperti menekan ENTER di baris URL, itu tidak mengirim garis itu.

Meskipun keduanya dikirim sebagai GET, yang pertama (ulang) memulihkan data sebelumnya dan aplikasi dalam keadaan tidak konsisten.

Pelaut Danubia
sumber
1

Tidak, seharusnya tidak ada. Namun, ada kemungkinan ada perbedaan di beberapa browser, jadi (atau keduanya) mungkin tidak berfungsi dalam beberapa kasus.

Olli
sumber
1

dari pengalaman saya sekitar 3 tahun, saya tidak dapat menemukan perbedaan ...

sunting: ya, seperti yang dikatakan salah satu dari mereka di sini, hanya meneruskan parameter boolean ke window.location.reload () adalah perbedaannya. jika Anda lulus true , maka browser memuat halaman baru, tetapi jika salah , maka versi cache dimuat ...

kumarharsh
sumber
0

Dalam kasus kami, kami hanya ingin memuat ulang halaman dalam tampilan web dan untuk beberapa alasan kami tidak dapat menemukan alasannya! Kami mencoba hampir setiap solusi yang telah ada di web, tetapi macet tanpa memuat ulang menggunakan location.reload () atau solusi alternatif seperti window.location.reload (), location.reload (true), ...!

Inilah solusi sederhana kami:

Cukup gunakan tag <a> dengan nilai atribusi "href" kosong seperti ini:

< a href="" ...>Click Me</a>

(dalam beberapa kasus Anda harus menggunakan "return true" pada klik target untuk memicu memuat ulang)

Untuk informasi lebih lanjut, periksa pertanyaan ini: Apakah href kosong valid?

Metro Polisue
sumber
-3

window.location.href, ini menyelamatkan hidup saya di tampilan web dari Android 5.1. Halaman tidak memuat ulang dengan location.reload () dalam versi ini dari Android.

Rony Silva
sumber