Ma webapp ont des erreurs javascript dans ios safari navigation privée :
mon code :
Ma webapp ont des erreurs javascript dans ios safari navigation privée :
mon code :
Apparemment, c'est par la conception. Quand Safari (OS X ou iOS) est en mode de navigation privée, il semble que localStorage
est disponible, mais d'essayer d'appel setItem
déclenche une exception.
store.js line 73
"QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota."
Ce qui se passe, c'est que l'objet de la fenêtre encore expose localStorage
en l'espace de noms global, mais lorsque vous appelez setItem
, cette exception est levée. Tous les appels à des removeItem
sont ignorés.
Je crois que la solution la plus simple (bien que je n'ai pas testé cette croix navigateur encore) serait de modifier la fonction isLocalStorageNameSupported()
de test que vous pouvez également définir une valeur.
https://github.com/marcuswestin/store.js/issues/42
function isLocalStorageNameSupported()
{
var testKey = 'test', storage = window.sessionStorage;
try
{
storage.setItem(testKey, '1');
storage.removeItem(testKey);
return localStorageName in win && win[localStorageName];
}
catch (error)
{
return false;
}
}
Le correctif publié le lien ci-dessus ne fonctionne pas pour moi. Cela fait :
Dérivé de http://m.cg/post/13095478393/detect-private-browsing-mode-in-mobile-safari-on-ios5
Dans mon contexte, juste développé une classe d'abstraction. Quand mon application est lancée, je vérifie si localStorage est de travailler en appelant getStorage(). Cette fonction est aussi de retour :
Dans mon code je n'ai jamais appel localStorage directement. J'appelle cusSto**global var, j'avais initialisé par appel **getStorage().
De cette façon, il fonctionne avec la navigation privée ou spécifiques Safari versions
function getStorage() {
var storageImpl;
try {
localStorage.setItem("storage", "");
localStorage.removeItem("storage");
storageImpl = localStorage;
}
catch(err) {
storageImpl = new LocalStorageAlternative();
}
return storageImpl;
}
function LocalStorageAlternative() {
var structureLocalStorage = {};
this.setItem = function (key, value) {
structureLocalStorage[key] = value;
}
this.getItem = function (key) {
if(typeof structureLocalStorage[key] != 'undefined' ) {
return structureLocalStorage[key];
}
else {
return null;
}
}
this.removeItem = function (key) {
structureLocalStorage[key] = undefined;
}
}
cusSto=getStorage();
J’ai eu le même problème à l’aide de cadre ionique (angulaire + Cordova). Je sais que cela ne résout ne pas le problème, mais c’est le code pour les Apps angulaire basée sur les réponses ci-dessus. Vous aurez une solution éphémère pour localStorage sur iOS version de Safari.
https://GIST.github.com/jorgecasar/61fda6590dc2bb17e871
Profitez de vos codes !
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.