Haruskah saya menggunakan window.navigate atau document.location di JavaScript?

177

Apa metode yang disukai untuk digunakan untuk mengubah lokasi halaman web saat ini menggunakan JavaScript? Saya telah melihat window.navigate dan document.location digunakan. Apakah ada perbedaan perilaku? Apakah ada perbedaan dalam implementasi browser?

dthrasher
sumber

Jawaban:

220
window.location.href = 'URL';

adalah implementasi standar untuk mengubah lokasi jendela saat ini.

James Skidmore
sumber
22
Apakah Anda memiliki referensi untuk menunjukkan bahwa window.location.href adalah implementasi standar? Dan apakah standar itu berlaku sama baiknya untuk semua browser? Anda tentu tampak berpengetahuan dan 15+ suara (ditambah jawaban yang diterima) membantu membuatnya lebih berwibawa, meskipun saya pikir akan lebih baik untuk melihat dokumentasi dari tim pengembangan browser untuk mendukung klaim.
Goyuix
6
@ Goyuix, mungkin lebih akurat untuk mengatakan bahwa itu window.location.hrefadalah implementasi yang lengkap, tetapi window.locationmencapai hal yang sama. Lihat docs.sun.com/source/816-6408-10/location.htm : "Jika Anda menetapkan string ke locationproperti objek, JavaScript membuat locationobjek dan menetapkan string itu ke hrefpropertinya."
James Skidmore
3
Sepertinya orang-orang ini memutuskan itu adalah preferensi pribadi: developer.mozilla.org/Talk:en/DOM/window.location . Atau lihat contoh di dekat bagian bawah, mereka hanya menggunakan window.locationtetapi itu tidak selalu menunjukkan cara baik: developer.mozilla.org/en/window.location .
James Skidmore
1
Saat ini saya menggunakan ini untuk pengembangan android. Saya mengalami masalah untuk mendapatkan halaman dialihkan dari JS di browser default Android. Saya mencoba window.location.href = 'URL';dan juga window.location.assign('URL');metode yang dirancang untuk memuat ulang halaman baru. Informasi lebih lanjut dapat ditemukan di w3schools.com/jsref/obj_location.asp
philipp
3
window.navigateadalah metode berpemilik, yang digunakan oleh Internet Explorer (saya perhatikan yakin apakah browser lain menirunya untuk kompatibilitas, Chrome tidak). document.locationatau window.locationobjek standar (lihat berbagai spesifikasi HTML / HTML5 / DOM). document.location = someURL(atau window.location = someURL) mungkin didukung karena kode lawas. Cara yang tepat untuk melakukannya adalah document.location.href = someURL, atau mungkin document.location.assign(someURL).
PhistucK
11

window.navigate tidak didukung di beberapa browser

Dalam skrip java ada banyak cara untuk pengalihan, lihat kode di bawah ini dan penjelasannya

window.location.href = "http://krishna.developerstips.com/";
window.location = "http://developerstips.com/";
window.location.replace("http://developerstips.com/");
window.location.assign("http://work.developerstips.com/");

window.location.href memuat halaman dari cache browser dan tidak selalu mengirim permintaan ke server. Jadi, jika Anda memiliki versi lama dari halaman yang tersedia di cache maka itu akan diarahkan ke sana alih-alih memuat halaman baru dari server.

metode window.location.assign () untuk pengalihan jika Anda ingin mengizinkan pengguna untuk menggunakan tombol kembali untuk kembali ke dokumen asli.

metode window.location.replace () jika Anda ingin mengarahkan ulang ke halaman baru dan jangan izinkan pengguna menavigasi ke halaman asli menggunakan tombol kembali.

Srikrushna
sumber
7

document.locatio n adalah properti string read-only (usang tetapi masih ada), digantikan oleh document.url .

kennebec
sumber
6

window.location juga mempengaruhi ke bingkai,

bentuk terbaik yang saya temukan adalah:

parent.window.location.href

Dan yang lebih buruk adalah:

parent.document.URL 

Saya melakukan tes browser besar-besaran, dan beberapa IE langka dengan beberapa plugin tidak terdefinisi dengan bentuk kedua.

jolmos
sumber
Dengan logika itu, bukankah top.window.location.href masih lebih baik?
Orwellophile
6

window.locationakan mempengaruhi target browser Anda. document.location hanya akan mempengaruhi browser Anda dan bingkai / iframe.

Aldry Zhen
sumber
4

window.navigateTIDAK didukung di beberapa browser, sehingga harus dihindari. Salah satu metode lain yang menggunakan properti lokasi adalah pendekatan yang paling dapat diandalkan dan konsisten

Troy Grosh
sumber
2

Saya akan pergi dengan window.location = "http://...";. Saya telah mengkode JavaScript lintas-browser selama beberapa tahun, dan saya tidak pernah mengalami masalah dalam menggunakan pendekatan ini.

window.navigatedan window.location.hrefsepertinya agak aneh bagiku.

cllpse
sumber
13
window.location berfungsi, tetapi secara teknis salah karena "lokasi" adalah objek.
James Skidmore
16
Tetapi segala sesuatu di JavaScript adalah obyek :)
cllpse
1
Walaupun hampir semuanya adalah objek dalam JavaScript, menetapkan string ke objek umumnya tidak menetapkan nilai ke salah satu propertinya (seperti window.location atau document.location dilakukan dengan properti href mereka), tetapi menggantikan objek itu dengan tali. Dalam hal ini, quirk browser harus ditambahkan agar kompatibel dengan implementasi dan konten lawas (unik) yang ada (dan bukan warisan).
PhistucK
1

Sebenarnya tidak ada perbedaan; ada sekitar 5 metode berbeda untuk melakukannya. Namun, yang paling sering saya lihat adalah document.locationdan window.locationkarena didukung oleh semua browser utama. (Saya pribadi belum pernah melihat window.navigatedigunakan dalam kode produksi, jadi mungkin itu tidak memiliki dukungan yang sangat baik?)

Sasha Chedygov
sumber
document.location tidak berfungsi di semua browser. window.lokasi tidak.
Philippe Leybaert
2
Firefox tidak mendukung window.navigate
Andrew Harry
-5

Anda dapat memindahkan halaman menggunakan

window.location.href =Url;
Wisnu Gupta
sumber
3
Ini tidak benar-benar menambahkan info lebih banyak daripada jawaban yang diterima, dan lipat berlipat ganda ...
Stuart Siegler 3-15
3
Anda bahkan dapat melangkah lebih jauh dan berargumen bahwa Anda telah menjiplak jawaban yang diterima
Liam