Dopo un reclamo da parte di uno dei nostri utenti ed eseguendo alcuni test, appare Firefox 15 e 16 (e probabilmente versione precedente) rendono così se disabiliti i cookie anche disabiliti memoria locale. Non è possibile anche creare un polyfill per esso, come ogni volta che si tenta di accedere window.localStorage
si ottiene Error: The operation is insecure.
Soluzione per i cookie di disabilitazione utente di Firefox e quindi localStorage - polyfill non possibile
Lanciare un tentativo di cattura vi permetterà di controllare per vedere se è disabile, ma non ti consente di sostituire la variabile con la propria soluzione . Il seguente polyfill rapido non funzionerà perché FF ignora l'impostazione della variabile e getterà lo stesso errore quando si tenta di accedervi:
try{
window.localStorage;
}catch(err){
window.localStorage = {
getItem: function(k){
return this.k;
},
setItem: function(k,v){
this.k = v;
}
};
}
L'unica soluzione sembra essere spostare il localStorage "falso" a un'altra variabile, ma questo sarebbe essere fastidioso dato che abbiamo un sacco di codice e una js lib che si basa sull'accesso a questa variabile. Qualche soluzione?
Modifica: Non è ottimale semplicemente far apparire un avviso per informare gli utenti che sono necessari i cookie. Se i visitatori vogliono solo visualizzare il sito e non registrarsi, non hanno davvero bisogno di cookies. Ma essendo un'applicazione backbone.js e girando un sacco di dati, noi immagazziniamo cose in localStorage un bel po '.
Se è possibile verificare se è disabilitato, basta far scattare un avviso o qualcosa dicendo che devono abilitare i cookie per il proprio sito. – MrOBrian
Grazie MrObrian, l'ho fatto e sto iniettando un div con il messaggio, ma sarebbe ottimale per il localStorage semplicemente funzionare come un archivio di chiavi/valori che non persisteva, poiché è ciò che l'utente desidera. –
"ma sarebbe ottimale per il localStorage semplicemente funzionare come un archivio di chiavi/valori che non persisteva" perché non utilizzare semplicemente un semplice array js in questo caso? –