Pembaruan (2016-11-01)
Saya menggunakan AmplifyJS yang disebutkan di bawah untuk mengatasi masalah ini. Namun, untuk Safari dalam penjelajahan Pribadi, itu kembali ke penyimpanan berbasis memori. Dalam kasus saya, itu tidak sesuai karena itu berarti penyimpanan dihapus saat refresh, bahkan jika pengguna masih dalam penelusuran pribadi.
Juga, saya perhatikan sejumlah pengguna yang selalu menjelajah dalam mode Privat di iOS Safari. Karena alasan itu, fallback yang lebih baik untuk Safari adalah menggunakan cookie (jika tersedia). Secara default, cookie masih dapat diakses bahkan di penelusuran pribadi. Tentu saja, mereka dihapus ketika keluar dari penjelajahan pribadi, tetapi mereka tidak dihapus saat refresh.
Saya menemukan perpustakaan penyimpanan-fallback lokal . Dari dokumentasi:
Tujuan
Dengan pengaturan peramban seperti "Penjelajahan Pribadi" menjadi masalah untuk mengandalkan jendela yang berfungsi. Penyimpanan lokal, bahkan di peramban yang lebih baru. Meskipun mungkin ada, itu akan membuang pengecualian ketika mencoba menggunakan setItem atau getItem. Modul ini akan menjalankan pemeriksaan yang sesuai untuk melihat mekanisme penyimpanan browser apa yang mungkin tersedia, dan kemudian memaparkannya. Ini menggunakan API yang sama dengan localStorage sehingga harus berfungsi sebagai pengganti drop-in dalam banyak kasus.
Waspadalah terhadap gotcha:
- CookieStorage memiliki batas penyimpanan. Hati-hati di sini.
- MemoryStorage tidak akan bertahan di antara pemuatan halaman. Ini lebih atau kurang merupakan celah berhenti untuk mencegah kerusakan halaman, tetapi mungkin cukup untuk situs web yang tidak melakukan pemuatan halaman penuh.
TL; DR:
Gunakan local-storage-fallback (API terpadu dengan .getItem(prop)
dan .setItem(prop, val)
):
Periksa dan gunakan adaptor penyimpanan yang sesuai untuk browser (Penyimpanan lokal, sesi penyimpanan, cookie, memori)
Jawaban asli
Untuk menambahkan jawaban sebelumnya, satu solusi yang mungkin dilakukan adalah mengubah metode penyimpanan. Ada beberapa librairie seperti AmplifyJS dan PersistJS yang dapat membantu. Kedua lib memungkinkan penyimpanan sisi klien yang persisten melalui beberapa backend.
Untuk AmplifyJS
penyimpanan lokal
- IE 8+
- Firefox 3.5+
- Safari 4+
- Chrome
- Opera 10.5+
- iPhone 2+
- Android 2+
sessionStorage
- IE 8+
- Firefox 2+
- Safari 4+
- Chrome
- Opera 10.5+
- iPhone 2+
- Android 2+
globalStorage
data pengguna
- IE 5 - 7
- userData ada di versi IE yang lebih baru juga, tetapi karena kebiasaan dalam implementasi IE 9, kami tidak mendaftarkan userData jika localStorage didukung.
Penyimpanan
- Toko dalam memori disediakan sebagai cadangan jika tidak ada jenis penyimpanan lain yang tersedia.
Untuk PersistentJS
- flash: Flash 8 penyimpanan persisten.
- gears: Penyimpanan persisten berbasis Google Gears.
- penyimpanan lokal: penyimpanan konsep HTML5.
- globalstorage: penyimpanan konsep HTML5 (spesifikasi lama).
- yaitu: perilaku data pengguna Internet Explorer.
- cookie: penyimpanan persisten berbasis-cookie.
Mereka menawarkan lapisan abstraksi sehingga Anda tidak perlu khawatir memilih jenis penyimpanan. Perlu diingat mungkin ada beberapa batasan (seperti batas ukuran) tergantung pada tipe penyimpanannya. Saat ini, saya menggunakan AmplifyJS, tetapi saya masih harus melakukan beberapa pengujian lagi pada iOS 7 / Safari / dll. untuk melihat apakah itu benar-benar menyelesaikan masalah.