I'm menulis aplikasi AJAX, tapi sebagai pengguna bergerak melalui app, saya'd seperti URL di address bar untuk update meskipun kurangnya ulang halaman. Pada dasarnya, saya'd seperti bagi mereka untuk bisa bookmark pada setiap titik dan dengan demikian kembali ke keadaan saat ini.
Bagaimana orang menangani menjaga Ketenangan di AJAX apps?
Cara untuk melakukan ini adalah untuk memanipulasi lokasi.hash
ketika AJAX update hasil dalam keadaan perubahan yang anda'd ingin memiliki bijaksana URL. Misalnya, jika halaman anda's url:
Jika klien samping fungsi yang dijalankan kode ini:
// AJAX code to display the "foo" state goes here.
location.hash = 'foo';
Kemudian, URL yang ditampilkan di browser akan diperbarui untuk:
Hal ini memungkinkan pengguna untuk bookmark "anu" negara dari halaman, dan menggunakan browser untuk menavigasi antara negara-negara.
Dengan mekanisme ini di tempat, anda'll maka perlu untuk mengurai hash bagian dari URL pada sisi client menggunakan JavaScript untuk membuat dan menampilkan sesuai keadaan awal, sebagai fragmen pengenal (bagian setelah #) tidak dikirim ke server.
Ben Alman's hashchange plugin membuat orang mudah jika anda're menggunakan jQuery.
Lihatlah situs-situs seperti book.cakephp.org. Ini perubahan situs URL tanpa menggunakan hash dan menggunakan AJAX. I'm tidak yakin bagaimana melakukannya persis tapi aku've telah mencoba untuk mencari tahu. Jika ada yang tahu, biarkan aku tahu.
Juga github.com ketika melihat sebuah navigasi dalam sebuah proyek tertentu.
Hal ini tidak mungkin penulis ingin untuk reload atau mengarahkan pengunjung ketika menggunakan Ajax.
Tapi mengapa tidak menggunakan HTML5's pushState
/replaceState
?
Anda'll dapat memodifikasi addressbar sebanyak yang anda suka. Get alami mencari url, dengan AJAX.
Memeriksa kode pada proyek terbaru saya: http://iesus.se/
Hal ini mirip dengan apa yang Kevin bilang. Anda dapat memiliki negara klien karena beberapa objek javascript, dan bila anda ingin menyelamatkan negara, anda membuat objek (menggunakan JSON dan base64 encoding). Anda kemudian dapat mengatur fragmen href string ini.
var encodedState = base64(json(state));
var newLocation = oldLocationWithoutFragment + "#" + encodedState;
document.location = newLocation; // adds new entry in browser history
document.location.replace(newLocation); // replaces current entry in browser history
Cara pertama akan memperlakukan negara baru sebagai lokasi baru (jadi tombol kembali akan membawa mereka ke lokasi sebelumnya). Yang terakhir tidak.
Jika OP atau orang lain yang masih mencari cara untuk melakukan memodifikasi browser sejarah untuk memungkinkan negara, menggunakan pushState dan replaceState, seperti yang disarankan oleh IESUS, adalah 'kan' cara untuk melakukan itu sekarang. It's keuntungan utama dari lokasi.hash tampaknya bahwa hal itu menciptakan aktual url, bukan hanya hash. Jika sejarah browser menggunakan hash yang disimpan, dan kemudian ditinjau dengan javascript dinonaktifkan, aplikasi won't bekerja, karena hash aren't dikirim ke server. Namun, jika pushState telah digunakan, seluruh rute yang akan dikirim ke server, yang anda kemudian dapat membangun untuk merespon dengan tepat terhadap rute. Saya melihat contoh di mana sama kumis template yang digunakan pada kedua server dan sisi client. Jika klien memiliki javascript diaktifkan, ia akan mendapatkan snappy tanggapan dengan menghindari pulang pergi ke server, tapi aplikasi ini akan bekerja baik-baik saja tanpa javascript. Dengan demikian, aplikasi dapat menurunkan anggun dengan tidak adanya javascript.
Juga, saya percaya ada beberapa framework yang ada, dengan nama seperti history.js. Untuk browser yang mendukung HTML5, menggunakan pushState, tapi jika browser doesn't dukungan itu, secara otomatis jatuh kembali untuk menggunakan hash.
Jendela.lokasi hotel ini.hash metode adalah cara yang lebih disukai dalam melakukan sesuatu. Untuk penjelasan tentang bagaimana untuk melakukannya, Ajax Pola - Unik Url.
YUI memiliki sebuah implementasi dari pola ini sebagai sebuah modul, yang meliputi IE kerja tertentu arounds untuk mendapatkan tombol kembali bekerja bersama dengan re-penulisan alamat dengan menggunakan hash. YUI Browser History Manager.
Lainnya kerangka kerja sama implementasi juga. Yang penting intinya adalah jika anda ingin sejarah untuk bekerja bersama dengan re-menulis alamat, browser yang berbeda membutuhkan cara yang berbeda dari penanganan itu. (Ini adalah rinci di link pertama artikel.)
YAITU kebutuhan iframe berbasis hack, di mana Firefox akan menghasilkan ganda sejarah dengan menggunakan metode yang sama.
Memeriksa apakah user 'di' halaman, ketika anda klik pada url bar, javascript mengatakan anda berada di luar halaman. Jika anda mengubah url bar dan tekan 'ENTER' dengan simbol '#' dalam hal kemudian anda pergi ke halaman lagi, tanpa klik pada halaman secara manual dengan kursor mouse, kemudian keyboad acara perintah (dokumen.onkeypress) dari javascript akan dapat memeriksa apakah itu's masuk dan aktif javascript untuk pengalihan. Anda dapat memeriksa apakah pengguna DI halaman dengan jendela.onfocus dan memeriksa apakah ia's dengan jendela.onblur.
Ya, itu's mungkin.
;)