html5 localStorage-Fehler mit Safari: "QUOTA_EXCEEDED_ERR: DOM-Ausnahme 22: Es wurde versucht, etwas zum Speicher hinzuzufügen, der das Kontingent überschritten hat."
Meine webapp javascript-Fehler in ios safari private-browsing:
JavaScript:Fehler
undefined
QUOTA_EXCEEDED_ERR:DOM Exception 22:Ein Versuch wurde gemacht, um etwas hinzufügen zu Speicher...
mein code:
localStorage.setItem('test',1)
Kommentar zu dem Problem
ein feature zu erkennen, dass die tests für dieses Problem. Wenn Speicher nicht verfügbar ist, sollten shimmen "localStorage" mit memoryStorage. disclaimer: ich bin der Autor der verlinkten Pakete
Hi Leute, ich helfen, safaridriver. Dieses Problem ist seit langem ein bug in WebKit, das wurde vor kurzem behoben. Local storage und session storage arbeiten jetzt in Safari 10.1 und höher. Dieses Update betrifft die normale Private-Browsing-Modus und Automation-Modus (verwendet von WebDriver).
InformationsquelleAutor der Frage leiyonglin | 2013-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anscheinend ist dies durch das design. Wenn Safari (OS X oder iOS) ist im private-browsing-Modus, es scheint, als ob
localStorage
verfügbar ist, aber Sie versuchen zu nennensetItem
wirft eine Ausnahme.Was passiert, ist, dass das window-Objekt noch macht
localStorage
im globalen namespace, aber, wenn Sie anrufensetItem
diese Ausnahme wird geworfen. Alle AnruferemoveItem
werden ignoriert.Glaube ich die einfachste Lösung (obwohl ich noch nicht getestet, cross-browser noch nicht) wäre so ändern Sie die Funktion
isLocalStorageNameSupported()
zu testen, können Sie auch legen einige Wert.https://github.com/marcuswestin/store.js/issues/42
InformationsquelleAutor der Antwort KingKongFrog
Den fix gepostet, der auf obigen link funktionierte nicht für mich. Dies Tat:
Abgeleitet von http://m.cg/post/13095478393/detect-private-browsing-mode-in-mobile-safari-on-ios5
InformationsquelleAutor der Antwort cyberwombat
Wie bereits in anderen Antworten, erhalten Sie immer die QuotaExceededError im Safari-Private Browser-Modus auf beiden iOS und OS X, wenn
localStorage.setItem
(odersessionStorage.setItem
) genannt wird.One-Lösung ist zu tun, einen try/catch-oder Modernizr überprüfen in jeder Instanz mit
setItem
.Jedoch, wenn Sie möchten, eine Distanzscheibe, die einfach Global hält dieser Fehler geworfen wird, um zu verhindern, dass der rest von JavaScript aus zu brechen, können Sie diese verwenden:
https://gist.github.com/philfreo/68ea3cd980d72383c951
InformationsquelleAutor der Antwort philfreo
In meinem Rahmen, nur entwickelt eine Klasse Abstraktion.
Wenn meine Anwendung gestartet wird, prüfe ich, ob localStorage arbeitet durch den Aufruf getStorage(). Auch diese Funktion zurück :
In meinem code, den ich nie nennen localStorage direkt. Ich nenne cusStoGlobale var, die ich hatte, initialisiert durch den Aufruf getStorage().
Diese Weise, es funktioniert mit private-browsing oder spezifische Safari-Versionen
InformationsquelleAutor der Antwort Pierre Le Roux
Erweitern auf andere Antworten, hier ist eine kompakte Lösung, die nicht setzen/hinzufügen von neuen Variablen. Es doesn ' T decken alle Basen, aber es sollte für die meisten Menschen, die wollen nur eine einzelne Seite app, damit Sie funktionsfähig bleibt (trotz keine Daten Persistenz nach reload).
InformationsquelleAutor der Antwort Jon
Ich hatte das gleiche problem mit dem Ionic framework (Angular + Cordova). Ich weiß, das das problem nicht lösen, aber es ist der code für Angular Apps basierend auf den oben genannten Antworten. Haben Sie eine kurzlebige Lösung für localStorage auf die iOS-version von Safari.
Hier ist der code:
Quelle: https://gist.github.com/jorgecasar/61fda6590dc2bb17e871
Genießen Sie Ihre Codierung!
InformationsquelleAutor der Antwort jorgecasar
Hier ist eine Lösung für AngularJS mit einem IIFE und nutzt die Tatsache, dass services sind singletons.
Diese Ergebnisse in
isLocalStorageAvailable
festgelegt wird sofort, wenn der Dienst zuerst eingespritzt und vermeidet unnötig Prüfung jedes mal den lokalen Speicher zugegriffen werden muss.InformationsquelleAutor der Antwort Pier-Luc Gendreau
Ich schuf diese repo zu bieten
sessionStorage
undlocalStorage
Funktionen für nicht unterstützte oder deaktiviert Browser.Unterstützte Browser
, Wie es funktioniert
Erkennt es das feature mit dem storage-Typ.
Setzt
StorageService.localStorage
zuwindow.localStorage
wenn es unterstützt wird oder erstellt eine cookie-Speicherung.Setzt
StorageService.sessionStorage
zuwindow.sessionStorage
wenn es unterstützt wird oder erstellt eine in-memory-storage für SPA -, cookie-Speicher mit sesion Funktionen für nicht-SPA.InformationsquelleAutor der Antwort Ahmet Can Güven
Nicht es verwenden, wenn nicht unterstützt, zu prüfen und zu unterstützen nur diese Funktion aufrufen
InformationsquelleAutor der Antwort Tarandeep Singh
Dem folgenden script gelöst mein problem:
Prüft Sie, ob localStorage vorhanden ist und verwendet werden kann, und im negativen Fall, Sie schafft eine gefälschte lokalen Speicher und verwendet es anstelle des original - "localStorage".
Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.
InformationsquelleAutor der Antwort Bogdan Mates