Die folgenden Code-Warnungen ls exist
in IE7:
if(window.localStorage) {
alert('ls exists');
} else {
alert('ls does not exist');
}
IE7 unterstützt lokalen Speicher nicht wirklich, dies warnt jedoch weiterhin. Vielleicht liegt das daran, dass ich IE9 im IE7-Browser und im Dokumentmodus mit dem IE9-Entwicklertool verwende. Oder vielleicht ist dies nur der falsche Weg, um zu testen, ob LS unterstützt wird. Was ist der richtige Weg?
Außerdem möchte ich Modernizr nicht verwenden, da ich nur einige wenige HTML5-Funktionen verwende und das Laden eines großen Skripts sich nicht lohnt, nur um die Unterstützung für diese wenigen Dinge zu erkennen.
javascript
html
TK123
quelle
quelle
Antworten:
Sie müssen modernizr nicht verwenden, aber Sie können ihre Methode verwenden, um festzustellen, ob dies
localStorage
unterstützt wirdmodernizr 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 aktuellem Quellcode
quelle
var mod = "test";
vor dem try-catch-Block hinzu, andernfalls schlägt dies immer fehl, da mod dort undefiniert ist.if(typeof Storage !== "undefined") { // Yes! localStorage and sessionStorage support! // Some code..... } else { // Sorry! No web storage support.. }
quelle
typeof(Storage) !== void(0)
ist bessere Lösungif (Storage !== void(0))
typeof
ist keine Funktion, sondern ein Sprachoperator. warum die Klammer?Diese Funktion funktioniert gut:
function supports_html5_storage(){ try { return 'localStorage' in window && window['localStorage'] !== null; } catch(e) { return false; } }
Quelle: www.diveintohtml5.info
quelle
'localStorage' in window
prüft, ob die Eigenschaft im Fensterobjekt existiert (ist nicht 'undefiniert'), und die zweitewindow['localStorage'] !== null
prüft, ob diese Eigenschaft nicht NULL ist.Um die Größe der Modernizr-Datei zu verringern , passen Sie die Datei unter http://modernizr.com/download/ an Ihre Bedürfnisse an. Eine Nur-Local-Storage-Version von Modernizr ist mit 1,55 KB verfügbar.
quelle
Versuchen Sie
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 bereitsquelle
SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent.
Ich habe es in den Antworten nicht gesehen, aber ich denke, es ist gut zu wissen, dass Sie Vanilla JS oder jQuery einfach für so einfache Tests verwenden können, und während Modernizr viel hilft, gibt es saubere Lösungen ohne es.
Wenn Sie jQuery verwenden , können Sie Folgendes tun:
var _supportsLocalStorage = !!window.localStorage && $.isFunction(localStorage.getItem) && $.isFunction(localStorage.setItem) && $.isFunction(localStorage.removeItem);
Oder mit reinem Vanilla JavaScript :
var _supportsLocalStorage = !!window.localStorage && typeof localStorage.getItem === 'function' && typeof localStorage.setItem === 'function' && typeof localStorage.removeItem === 'function';
Dann würden Sie einfach eine IF durchführen, um den Support 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 von Ihrem Code verwendeten Methoden testen.
quelle
Versuchen Sie fangen wird den Job machen:
try{ localStorage.setItem("name",name.value); localStorage.setItem("post",post.value); } catch(e){ alert(e.message); }
quelle
Versuchen:
if(typeof window.localStorage != 'undefined') { }
quelle
if (window.localStorage){ alert('localStorage is supported'); window.localStorage.setItem("whatever", "string value"); }
quelle
Das Ändern der Antwort von Andrea, um einen Getter hinzuzufügen, erleichtert die Verwendung. Mit dem Folgenden sagen Sie einfach:
if(ls)...
var ls = { get: function () { var test = 'test'; try { localStorage.setItem(test, test); localStorage.removeItem(test); return true; } catch(e) { return false; } } };
var ls = { get: function () { var test = 'test'; try { localStorage.setItem(test, test); localStorage.removeItem(test); return true; } catch(e) { return false; } } }; function script(){ if(ls){ alert('Yes'); } else { alert('No'); } }
<button onclick="script()">Local Storage Support?</button>
quelle
Ich weiß, dass ich etwas spät zur Party komme, aber ich habe ein paar nützliche Funktionen, die ich mir ausgedacht und in eine Datei mit dem Namen 'manage_storage.js' geworfen habe. Ich hoffe, sie sind für euch genauso nützlich, wie sie mir gut gedient haben.
Also ohne weiteres hier ist mein Code:
/* Conditional Function checks a web browser for 'session storage' support. [BEGIN] */ if (typeof isSessStorageAllowed !== 'function') { function isSessStorageAllowed() { if (!!window.sessionStorage && typeof sessionStorage.getItem === 'function' && typeof sessionStorage.setItem === 'function' && typeof sessionStorage.removeItem === 'function') { try { var cur_dt = new Date(); var cur_tm = cur_dt.getTime(); var ss_test_itm_key = 'ss_test_itm_' + String(cur_tm); var ss_test_val = 'ss_test_val_' + String(cur_tm); sessionStorage.setItem(ss_test_itm_key, String(ss_test_val)); if (sessionStorage.getItem(ss_test_itm_key) == String(ss_test_val)) { return true; } else { return false; }; sessionStorage.removeItem(ss_test_itm_key); } catch (exception) { return false; }; } else { return false; }; }; }; /* Conditional Function checks a web browser for 'session storage' support. [END] */ /* Conditional Function checks a web browser for 'local storage' support. [BEGIN] */ if (typeof isLclStorageAllowed !== 'function') { function isLclStorageAllowed() { if (!!window.localStorage && typeof localStorage.getItem === 'function' && typeof localStorage.setItem === 'function' && typeof localStorage.removeItem === 'function') { try { var cur_dt = new Date(); var cur_tm = cur_dt.getTime(); var ls_test_itm_key = 'ls_test_itm_' + String(cur_tm); var ls_test_val = 'ls_test_val_' + String(cur_tm); localStorage.setItem(ls_test_itm_key, String(ls_test_val)); if (localStorage.getItem(ls_test_itm_key) == String(ls_test_val)) { return true; } else { return false; }; localStorage.removeItem(ls_test_itm_key); } catch (exception) { return false; }; } else { return false; }; }; }; /* Conditional Function checks a web browser for 'local storage' support. [END] */ /* Conditional Function checks a web browser for 'web storage' support. [BEGIN] */ /* Prerequisites: 'isSessStorageAllowed()', 'isLclStorageAllowed()' */ if (typeof isWebStorageAllowed !== 'function') { function isWebStorageAllowed() { if (isSessStorageAllowed() === true && isLclStorageAllowed() === true) { return true; } else { return false; }; }; }; /* Conditional Function checks a web browser for 'web storage' support. [END] */
quelle