Saya membuat galeri foto, dan ingin mengubah string dan judul kueri saat foto-foto itu diramban.
Perilaku yang saya cari sering terlihat dengan beberapa implementasi halaman berkelanjutan / tak terbatas, di mana saat Anda menggulir ke bawah, string kueri terus menambah nomor halaman ( http://x.com?page=4 ) dll .. Ini seharusnya sederhana dalam teori, tapi saya ingin sesuatu yang aman di browser utama.
Saya menemukan postingan yang bagus ini , dan mencoba mengikuti contoh dengan window.history.pushstate
, tetapi sepertinya tidak berhasil untuk saya. Dan saya tidak yakin apakah itu ideal karena saya tidak terlalu peduli tentang mengubah riwayat browser.
Saya hanya ingin menawarkan kemampuan untuk menandai foto yang sedang dilihat, tanpa memuat ulang halaman setiap kali foto diubah.
Berikut adalah contoh halaman tak terbatas yang mengubah string kueri: http://tumbledry.org/
UPDATE menemukan metode ini:
window.location.href = window.location.href + '#abc';
tampaknya berfungsi untuk saya, tetapi saya menggunakan chrome baru .. mungkin akan menyebabkan beberapa masalah dengan browser lama?
sumber
:)
Jawaban:
Jika Anda mencari modifikasi Hash, solusi Anda berfungsi dengan baik. Namun, jika Anda ingin mengubah kueri, Anda dapat menggunakan pushState, seperti yang Anda katakan. Ini adalah contoh yang mungkin membantu Anda menerapkannya dengan benar. Saya menguji dan itu bekerja dengan baik:
Ini tidak memuat ulang halaman, tetapi hanya memungkinkan Anda untuk mengubah kueri URL. Anda tidak akan dapat mengubah protokol atau nilai host. Dan tentunya membutuhkan browser modern yang bisa mengolah HTML5 History API.
Untuk informasi lebih lanjut:
http://diveintohtml5.info/history.html
https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history
sumber
window.location.protocol + '//' + window.location.host
hanya:window.location.origin
.history.pushState()
. Tidak adastate
argumen sebenarnya yang dibutuhkan. Keduanya berarti Anda dapat melakukan sesuatu yang sederhana sepertihistory.pushState(null, '', '/foo?bar=true')
jika url baru Anda ada di host / port yang sama.history.replaceState()
dengan argumen yang sama.if (window.history.pushState) { const newURL = new URL(window.location.href); newURL.search = '?myNewUrlQuery=1'; window.history.pushState({ path: newURL.href }, '', newURL.href); }
Berdasarkan jawaban Fabio, saya membuat dua fungsi yang mungkin berguna bagi siapa pun yang tersandung pada pertanyaan ini. Dengan dua fungsi ini, Anda dapat memanggil
insertParam()
dengan kunci dan nilai sebagai argumen. Ini akan menambahkan parameter URL atau, jika parameter kueri sudah ada dengan kunci yang sama, itu akan mengubah parameter itu ke nilai baru:sumber
new URLSearchParams()
dengan metode aslinya sebagai set dan hapus ? dalam kedua kasus kita harus memasukkannya ke dalam sejarah denganhistory.pushState()
new URLSearchParams()
tidak didukung oleh versi IE mana punSaya telah menggunakan pustaka JavaScript berikut dengan sangat sukses:
https://github.com/balupton/jquery-history
Ini mendukung API riwayat HTML5 serta metode fallback (menggunakan #) untuk browser lama.
Library ini pada dasarnya adalah polyfill di sekitar `history.pushState '.
sumber
Saya ingin meningkatkan jawaban Fabio dan membuat fungsi yang menambahkan kunci kustom ke string URL tanpa memuat ulang halaman.
sumber
Maka API riwayat adalah apa yang Anda cari. Jika Anda juga ingin mendukung browser lama, cari pustaka yang kembali memanipulasi tag hash URL jika browser tidak menyediakan API riwayat.
sumber