Güncelleme (2016-11-01)
Bu soruna geçici bir çözüm bulmak için aşağıda belirtilen AmplifyJS kullanıyordum. Ancak, Safari'de Gizli tarama için bellek tabanlı bir depolamaya geri dönüyordu. Benim durumumda, bu uygun değildi çünkü kullanıcı hala özel taramada olsa bile depolamanın yenilenme sırasında temizlendiği anlamına geliyor.
Ayrıca, iOS Safari'de her zaman Özel modda dolaşan birkaç kullanıcı fark ettim. Bu nedenle, Safari için daha iyi bir geri dönüş çerezleri (varsa) kullanmaktır. Varsayılan olarak, çerezler gizli taramada bile erişilebilir. Tabii ki, özel taramadan çıktıklarında temizlenirler, ancak yenileme sırasında temizlenmezler.
Local-storage-fallback kütüphanesini buldum . Belgelerden:
amaç
"Özel Tarama" gibi tarayıcı ayarlarında, yeni tarayıcılarda bile çalışan bir window.localStorage'a güvenmek bir sorun haline gelmiştir. Var olmasına rağmen, setItem veya getItem kullanmaya çalışırken istisnalar atacaktır. Bu modül, hangi tarayıcı depolama mekanizmasının kullanılabileceğini görmek için uygun kontrolleri çalıştıracak ve sonra ortaya çıkaracaktır. LocalStorage ile aynı API'yı kullanır, bu nedenle çoğu durumda bir yedek değiştirme olarak çalışmalıdır.
Gotchas dikkat:
- CookieStorage'ın depolama sınırları vardır. Burada dikkatli ol.
- MemoryStorage sayfa yüklemeleri arasında kalmayacak. Bu, sayfa kilitlenmelerini önlemek için aşağı yukarı bir boşluktur, ancak tam sayfa yüklemesi yapmayan web siteleri için yeterli olabilir.
TL; DR:
Kullanım yerel depolama yedeği (ile birleşik API .getItem(prop)
ve .setItem(prop, val)
):
Tarayıcı için uygun depolama adaptörünü kontrol edin ve kullanın (localStorage, sessionStorage, çerezler, bellek)
Orijinal cevap
Önceki yanıtlara eklemek için olası bir çözüm depolama yöntemini değiştirmek olacaktır. AmplifyJS ve PersistJS gibi yardımcı olabilecek birkaç kütüphaneci vardır . Her iki kütük de birkaç arka uç aracılığıyla kalıcı istemci tarafında depolamaya izin verir.
AmplifyJS için
yerel depolama
- IE 8+
- Firefox 3.5 ve üzeri
- Safari 4+
- Krom
- Opera 10.5 ve üstü
- iPhone 2+
- Android 2 ve üstü
sessionStorage
- IE 8+
- Firefox 2+
- Safari 4+
- Krom
- Opera 10.5 ve üstü
- iPhone 2+
- Android 2 ve üstü
globalStorage
Kullanıcı bilgisi
- IE 5-7
- userData, IE'nin yeni sürümlerinde de mevcuttur, ancak IE 9'un uygulamasındaki tuhaflıklar nedeniyle, localStorage destekleniyorsa userData'yı kaydetmiyoruz.
hafıza
- Diğer depolama türlerinden hiçbiri yoksa bellek içi bir depo yedek olarak sağlanır.
Kalıcı JS için
- flash: Flash 8 kalıcı depolama.
- Dişliler: Google Gears tabanlı kalıcı depolama.
- localstorage: HTML5 taslak depolama.
- globalstorage: HTML5 taslak depolama (eski özellikler).
- ie: Internet Explorer kullanıcı veri davranışları.
- çerez: Çerez tabanlı kalıcı depolama.
Depolama türünü seçme konusunda endişelenmenize gerek kalmayacak şekilde bir soyutlama katmanı sunarlar. Ancak depolama türüne bağlı olarak bazı sınırlamalar (boyut sınırları gibi) olabileceğini unutmayın. Şu anda AmplifyJS kullanıyorum, ancak yine de iOS 7 / Safari / vb. Üzerinde biraz daha test yapmak zorundayım. Sorunu gerçekten çözüp çözmediğini görmek için.