Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 17142|Jawab: 2

[HTML/HTML5] HTML tidak di-refresh untuk mengubah alamat url

[Salin tautan]
Diposting pada 12/09/2017 13.55.04 | | | |

Diperkenalkan sejak Gecko2 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)

HTML5 memperkenalkan dua metode, histtory.pushState() dan history.replaceState(), yang memungkinkan penambahan dan modifikasi entitas riwayat. Pada saat yang sama, metode ini bekerja dengan peristiwa window.onpostate.

Ubah perujuk menggunakan metode history.pushState(), yang dapat digunakan dalam header http yang dibuat untuk objek xmlhttpRequest setelah status dimodifikasi. Perujuk ini akan menjadi URL dokumen saat XMLHttpRequest dibuat.

pushState digunakan untuk menambahkan catatan halaman saat ini ke riwayat, sementara replaceState dan pushState digunakan persis sama, satu-satunya perbedaan adalah digunakan untuk memodifikasi catatan halaman saat ini dalam riwayat.

contoh
Misalkan halaman http://mozilla.org/foo.html mengeksekusi JS

var stateObj = { foo: "bar" }; history.pushState(stateObj, "halaman 2", "bar.html");
Metode ini akan membuat bilah alamat URL ditampilkan http://mozilla.org/bar.html,Tetapi browser tidak akan memuat halaman bar.html, meskipun ada

Sekarang sekali lagi asumsikan bahwa pengguna terus mengakses http://google.com dan mengklik kembali. Pada saat ini, bilah alamat url akan, http://mozilla.org/bar.html, halaman akan mendapatkan peristiwa popstate (chrome), yang akan berisi salinan stateObj. Halaman ini terlihat seperti foo.html. +

Pada titik ini, kita mengklik kembali lagi, dan URL akan berubah http://mozilla.org/foo.html,document akan mendapatkan peristiwa popstate lain dan objek status null. Tindakan pengembalian ini tidak mengubah konten dokumen. (Mungkin setelah beberapa saat akan mencoba memuat ...) krom)

metode pushState
pushState() memiliki tiga parameter: objek status, judul (sekarang diabaikan, tidak ditangani), URL (opsional). Spesifikasi:

·        state object – Objek state adalah objek Javascrip{filter}t yang berhubungan dengan entitas riwayat baru yang dibuat oleh metode pushState(). Digunakan untuk menyimpan informasi tentang entri yang ingin Anda masukkan ke dalam riwayat. Objek State dapat berupa string Json apa pun. Karena Firefox menggunakan hard drive pengguna untuk mengakses objek state, ruang penyimpanan maksimum objek ini adalah 640k. Jika lebih besar dari nilai ini, metode pushState() melemparkan pengecualian. Jika Anda membutuhkan lebih banyak ruang untuk menyimpan, gunakan penyimpanan lokal.

·        title—Firefox mengabaikan parameter ini sekarang, meskipun mungkin akan digunakan di masa mendatang. Cara teraman untuk menggunakannya sekarang adalah dengan meneruskan string kosong untuk mencegah modifikasi di masa mendatang. Atau Anda dapat meneruskan judul pendek untuk menunjukkan status

·        URL - Parameter ini digunakan untuk meneruskan URL entitas riwayat baru, perhatikan bahwa browser tidak akan memuat URL ini setelah memanggil metode pushState(). Tapi mungkin setelah beberapa saat itu akan mencoba memuat URL ini. Misalnya, setelah pengguna memulai ulang browser, URL baru dapat bukan jalur absolut. Jika itu adalah jalur relatif, maka itu akan relatif terhadap URL yang ada. URL baru harus berdomain bersama dengan url yang ada, jika tidak, pushState() akan melemparkan pengecualian. Parameter ini bersifat opsional, dan jika kosong, parameter ini akan ditempatkan sebagai URL dokumen saat ini.

Dalam arti tertentu, memanggil metode pushState() sama seperti mengatur window.locatio{filter}n = "#foo", yang keduanya membuat dan mengaktifkan entitas riwayat lain yang terkait dengan dokumen saat ini, tetapi pushState() memiliki beberapa keuntungan tambahan:

URL baru dapat berupa URL apa pun yang berada di domain yang sama dengan URL saat ini, bukan window.locatio{filter}n yang tetap berada di dokumen yang sama jika hanya hash yang ditetapkan.

l Anda dapat membiarkan URL tidak diubah jika tidak perlu. Sebagai perbandingan, atur window.locatio{filter}n = "#foo"; Hanya entitas riwayat baru yang dibuat, jika hash Anda saat ini tidak #foo

Anda dapat mengaitkan data arbitrer dengan entitas riwayat baru Anda. Dengan pendekatan berbasis hash, semua data yang relevan perlu dikodekan menjadi string pendek.

Perhatikan bahwa metode pushState() tidak membuat waktu hashchange terjadi, bahkan jika url lama dan baru hanyalah hash yang berbeda.

replaceState()
history.replaceState() digunakan seperti pushState(), kecuali bahwa replaceState() digunakan untuk memodifikasi entitas riwayat saat ini alih-alih membuat yang baru. Metode ini terkadang dapat berguna ketika Anda perlu memperbarui objek status atau entitas riwayat saat ini sebagai respons terhadap perilaku pengguna tertentu, dan Anda dapat menggunakannya untuk memperbarui URL objek status atau entitas riwayat saat ini.

Acara Popstate
Ketika entitas riwayat diubah, peristiwa popstate akan terjadi. Jika entitas riwayat dihasilkan oleh metode pushState dan replaceState, atribut status peristiwa popstate akan berisi salinan objek status dari entitas riwayat

Lihat window.onpopstate untuk detailnya

Baca status saat ini
Baca status yang ada

Saat halaman dimuat, halaman mungkin memiliki objek status yang tidak kosong. Hal ini dapat terjadi ketika halaman menetapkan objek status (menggunakan pushState atau replaceState) dan pengguna memulai ulang browser. Saat halaman dimuat ulang, halaman akan menerima peristiwa onload, tetapi tidak akan ada peristiwa popstate. Namun, jika Anda membaca properti history.state, Anda akan mendapatkan objek state ini setelah peristiwa popstate terjadi


Dokumentasi History.pushState(): https://developer.mozilla.org/zh-CN/docs/Web/API/History/pushState



Parameter URL penerima adalah jenis string, yang digunakan untuk mengubah URL bilah alamat saat ini. Satu hal yang perlu diperhatikan adalah bahwa parameter ini tidak boleh sama dengan lintas domain, yaitu protokol, nama domain, dan port harus sama.

DOMException yang tidak tertangkap: Gagal mengeksekusi 'pushState' pada 'History': Objek status histori dengan URL 'http://www.test.com/' tidak dapat dibuat dalam dokumen dengan asal ' https://www.itsvse.com' dan URL 'https://www.itsvse.com/'.
    pada <anonymous>:1:9



Kode yang benar:







Mantan:Baidu Maps mendapatkan titik koordinat area tersebut
Depan:Insinyur Huawei secara keliru menghapus data pengguna, menyebabkan 800.000 ponsel di Guangxi Mobile tidak dapat melakukan panggilan
Diposting pada 27/10/2017 09.51.10 |
Ini cukup detail, lumayan
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com