Frage So erkennen Sie, ob der Browser den lokalen HTML5-Speicher unterstützt


Der folgende Code warnt ls exist in IE7:

if(window.localStorage) {
    alert('ls exists');
} else {
    alert('ls does not exist');
}

IE7 unterstützt nicht wirklich lokalen Speicher, aber dies warnt immer noch. Vielleicht liegt das daran, dass ich IE9 in IE7 Browser und Dokument-Modi mit dem IE9-Entwickler-Tool verwendet. Oder vielleicht ist das nur der falsche Weg zu testen, ob LS unterstützt wird. Was ist der richtige Weg?

Außerdem möchte ich Modernizr nicht verwenden, da ich nur ein paar HTML5-Funktionen verwende und das Laden eines großen Skripts ist es nicht wert, nur um Unterstützung für diese wenigen Dinge zu finden.


75
2018-06-26 19:14


Ursprung


Antworten:


Sie müssen nicht modernisiz verwenden, aber Sie können ihre Methode verwenden, um zu erkennen, ob localStorage wird unterstützt

moderniszr bei github
Test für localStorage

// In FF4, if disabled, window.localStorage should === null.

// Normally, we could not test that directly and need to do a
//   `('localStorage' in window) && ` test first because otherwise Firefox will
//   throw bugzil.la/365772 if cookies are disabled

// Also in iOS5 & Safari Private Browsing mode, attempting to use localStorage.setItem
// will throw the exception:
//   QUOTA_EXCEEDED_ERRROR DOM Exception 22.
// Peculiarly, getItem and removeItem calls do not throw.

// Because we are forced to try/catch this, we'll go aggressive.

// Just FWIW: IE8 Compat mode supports these features completely:
//   www.quirksmode.org/dom/html5.html
// But IE8 doesn't support either with local files

Modernizr.addTest('localstorage', function() {
    var mod = 'modernizr';
    try {
        localStorage.setItem(mod, mod);
        localStorage.removeItem(mod);
        return true;
    } catch(e) {
        return false;
    }
});

aktualisiert mit dem aktuellen Quellcode


87
2018-06-26 19:18



if(typeof Storage !== "undefined")
  {
  // Yes! localStorage and sessionStorage support!
  // Some code.....
  }
else
  {
  // Sorry! No web storage support..
  }

35
2018-06-26 19:15



Außerdem möchte ich Modernizr nicht verwenden, da ich nur ein paar HTML5 benutze   Features und das Laden eines großen Skripts ist es nicht wert, nur zu erkennen   Unterstützung für diese wenigen Dinge.

Um die Dateigröße von Modernizr zu reduzieren, passen Sie die Datei an http://modernizr.com/download/ um Ihre Bedürfnisse zu erfüllen. Eine localStorage-only-Version von Modernizr wird mit 1,55 KB geliefert.


15
2018-04-01 14:16



Diese Funktion funktioniert gut:

function supports_html5_storage(){
    try {
        return 'localStorage' in window && window['localStorage'] !== null;
    } catch(e) {
        return false;
    }
}

Quelle: www.diveintohtml5.info


13
2017-08-15 10:02



Versuchen window.localStorage!==undefined:

if(window.localStorage!==undefined){
    //Do something
}else{
    alert('Your browser is outdated!');
}

Sie können auch verwenden typeof window.localStorage!=="undefined", aber die obige Aussage macht es schon


8
2018-06-26 19:15



Ich habe es nicht in den Antworten gesehen, aber ich denke, es ist gut zu wissen, dass Sie einfach Vanille JS oder jQuery für solche einfachen Tests verwenden können, und während Modernizr viel hilft, gibt es saubere Lösungen ohne es.

Wenn du benutzt jQuery, du kannst tun:

var _supportsLocalStorage = !!window.localStorage
    && $.isFunction(localStorage.getItem)
    && $.isFunction(localStorage.setItem)
    && $.isFunction(localStorage.removeItem);

Oder mit reiner Vanille JavaScript:

var _supportsLocalStorage = !!window.localStorage
    && typeof localStorage.getItem === 'function'
    && typeof localStorage.setItem === 'function'
    && typeof localStorage.removeItem === 'function';

Dann würden Sie einfach einen IF machen, um die Unterstützung zu testen:

if (_supportsLocalStorage) {
    console.log('ls is supported');
    alert('ls is supported');
}

Die ganze Idee ist also, dass Sie, wann immer Sie JavaScript-Funktionen benötigen, zuerst das übergeordnete Objekt und dann die Methoden Ihres Codes testen.


6
2017-07-26 20:52



Versuch zu fangen, mach den Job:

    try{
       localStorage.setItem("name",name.value);
       localStorage.setItem("post",post.value);
       }
    catch(e){
       alert(e.message);    
       }

3
2017-08-10 09:02