Следующие предупреждения кода ls exist
в IE7:
if(window.localStorage) {
alert('ls exists');
} else {
alert('ls does not exist');
}
IE7 на самом деле не поддерживает локальное хранилище, но это все равно предупреждает об этом. Возможно, это связано с тем, что я использую IE9 в браузере IE7 и в режимах документов с помощью инструмента разработчика IE9. Или, может быть, это просто неправильный способ проверить, поддерживается ли LS. Какой правильный путь?
Также я не хочу использовать Modernizr, поскольку я использую только несколько функций HTML5, а загрузка большого скрипта не стоит того, чтобы просто обнаружить поддержку этих немногих вещей.
javascript
html
TK123
источник
источник
Ответы:
Вам не обязательно использовать modernizr, но вы можете использовать их метод, чтобы определить,
localStorage
поддерживается лиmodernizr на github
тест для
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; } });
обновлен текущим исходным кодом
источник
var mod = "test";
перед блоком try-catch, иначе это всегда будет ошибкой, так как там мод не определен.if(typeof Storage !== "undefined") { // Yes! localStorage and sessionStorage support! // Some code..... } else { // Sorry! No web storage support.. }
источник
typeof(Storage) !== void(0)
это лучшее решениеif (Storage !== void(0))
typeof
не функция, это оператор языка. почему скобка?Эта функция отлично работает:
function supports_html5_storage(){ try { return 'localStorage' in window && window['localStorage'] !== null; } catch(e) { return false; } }
Источник: www.diveintohtml5.info
источник
'localStorage' in window
проверяет, существует ли свойство в объекте окна (не «undefined»), а втораяwindow['localStorage'] !== null
проверяет, что это свойство не равно NULL.Чтобы уменьшить размер файла Modernizr, настройте файл на http://modernizr.com/download/ в соответствии со своими потребностями. Версия Modernizr только для localStorage имеет размер 1,55 КБ.
источник
Попробуйте
window.localStorage!==undefined
:if(window.localStorage!==undefined){ //Do something }else{ alert('Your browser is outdated!'); }
Вы также можете использовать
typeof window.localStorage!=="undefined"
, но в приведенном выше заявлении это уже сделаноисточник
SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent.
Я не видел этого в ответах, но я думаю, что хорошо знать, что вы можете легко использовать ванильный JS или jQuery для таких простых тестов, и, хотя Modernizr очень помогает, есть чистые решения и без него.
Если вы используете jQuery , вы можете:
var _supportsLocalStorage = !!window.localStorage && $.isFunction(localStorage.getItem) && $.isFunction(localStorage.setItem) && $.isFunction(localStorage.removeItem);
Или с чистым ванильным JavaScript :
var _supportsLocalStorage = !!window.localStorage && typeof localStorage.getItem === 'function' && typeof localStorage.setItem === 'function' && typeof localStorage.removeItem === 'function';
Затем вы просто выполните IF, чтобы проверить поддержку:
if (_supportsLocalStorage) { console.log('ls is supported'); alert('ls is supported'); }
Таким образом, вся идея заключается в том, что всякий раз, когда вам нужны функции JavaScript, вы должны сначала протестировать родительский объект, а затем методы, которые использует ваш код.
источник
Попробуйте поймать:
try{ localStorage.setItem("name",name.value); localStorage.setItem("post",post.value); } catch(e){ alert(e.message); }
источник
Пытаться:
if(typeof window.localStorage != 'undefined') { }
источник
if (window.localStorage){ alert('localStorage is supported'); window.localStorage.setItem("whatever", "string value"); }
источник
Изменение ответа Андреа для добавления получателя упрощает его использование. Ниже вы просто говорите:
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>
источник
Я знаю, что немного опаздываю на вечеринку, но у меня есть несколько полезных функций, которые я приготовил и поместил в файл с именем manage_storage.js. Я надеюсь, что они так же полезны для вас, как и мне.
Итак, без лишних слов, вот мой код:
/* 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] */
источник