Po skardze jednego z naszych użytkowników i uruchomieniu niektórych testów wygląda na to, że Firefox 15 i 16 (i prawdopodobnie starsza wersja) sprawiają, że wyłącza pliki cookie, które również wyłączasz Lokalny magazyn. Nie możesz nawet utworzyć polyfill dla niego, gdy próbujesz uzyskać dostęp do window.localStorage
otrzymasz Error: The operation is insecure.
Rozwiązanie dla użytkownika Firefox wyłączające obsługę plików cookie, a więc localStorage - polyfill nie jest możliwe
Rzucanie catch próbny pozwoli Ci sprawdzić, czy jest wyłączona, ale nie pozwoli Ci zastąpić zmiennej własnym rozwiązaniem . Poniższy szybkie polyfill nie zadziała, ponieważ FF ignoruje ustawienie zmiennej i rzuci ten sam błąd, gdy próbuje uzyskać do niego dostęp:
try{
window.localStorage;
}catch(err){
window.localStorage = {
getItem: function(k){
return this.k;
},
setItem: function(k,v){
this.k = v;
}
};
}
Jedynym rozwiązaniem wydaje się przesunąć „fake” localStorage do innej zmiennej, ale to byłoby być denerwujące, ponieważ mamy dużo kodu i bibliotekę js, która polega na dostępie do tej zmiennej. Jakieś rozwiązania?
Edytuj: Nie jest optymalne wyskakujące powiadomienie informujące użytkowników, że pliki cookie są wymagane. Jeśli odwiedzający chcą tylko przeglądać witrynę, a nie rejestrować się, to naprawdę nie potrzebują plików cookie. Ale będąc aplikacją backbone.js i przekazywaniem dużej ilości danych, przechowujemy rzeczy w localStorage całkiem sporo.
Jeśli możesz sprawdzić, czy jest wyłączony, po prostu wyślij alert lub coś informującego o tym, że musisz włączyć obsługę plików cookie w swojej witrynie. – MrOBrian
Dziękuję MrObrian, Zrobiłem to i robię zastrzyk z komunikatem, ale byłoby optymalne, aby localStorage działał jako magazyn klucza/wartości, który nie trwał, ponieważ tego właśnie chce użytkownik. –
"ale byłoby optymalne, aby localStorage działało jako magazyn kluczy/wartości, który nie przetrwał" dlaczego nie użyć tylko prostej tablicy js w tym przypadku? –