检查localStorage是否可用
我知道关于检查localStorage
有很多问题,但是如果有人在浏览器中手动closures它,会怎么样呢? 这里是我用来检查的代码:
localStorage.setItem('mod', 'mod'); if (localStorage.getItem('mod') != null){ alert ("yes"); localStorage.removeItem('mod'); }else{ alert ("no"); }
简单的function,它的作品。 但是,如果我进入我的Chrome设置,并select“不保存数据”(我不记得到底是什么)的选项,当我尝试运行这个函数,我什么也得不到,但未Uncaught Error: SecurityError: DOM Exception 18
。 那么有没有办法检查这个人是否完全closures了?
更新:这是我尝试的第二个function,我仍然没有回应(警报)。
try { localStorage.setItem("name", "Hello World!"); } catch (e) { if (e == QUOTA_EXCEEDED_ERR) { alert('Quota exceeded!'); } }
使用modernizr
的方法(你可能想把我的函数名改成更好的):
function lsTest(){ var test = 'test'; try { localStorage.setItem(test, test); localStorage.removeItem(test); return true; } catch(e) { return false; } } if(lsTest() === true){ // available }else{ // unavailable }
这不像其他方法那么简洁,但这是因为它旨在最大限度地提高兼容性。
原始来源: https : //github.com/Modernizr/Modernizr/blob/master/feature-detects/storage/localstorage.js
工作示例: http : //jsfiddle.net/6sm54/2/
我会检查localStorage
是否在依赖于它的任何操作之前被定义:
if (typeof localStorage !== 'undefined') { var x = localStorage.getItem('mod'); } else { // localStorage not defined }
更新:
如果您需要validation该function是否存在并且未closures,则必须使用更安全的方法。 为了完全安全:
if (typeof localStorage !== 'undefined') { try { localStorage.setItem('feature_test', 'yes'); if (localStorage.getItem('feature_test') === 'yes') { localStorage.removeItem('feature_test'); // localStorage is enabled } else { // localStorage is disabled } } catch(e) { // localStorage is disabled } } else { // localStorage is not available }
function检测本地存储是棘手的。 你需要真正达到它。 原因是Safari在私有模式下select了提供一个function性的localStorage
对象, 但是它的配额设置为零 。 这意味着虽然所有简单的特征检测都会通过,但是任何对localStorage.setItem
调用都会抛出exception。
Web Storage API上的Mozilla开发者networking条目有一个关于function检测本地存储的专门章节 。 这是在该页面上推荐的方法:
function storageAvailable(type) { try { var storage = window[type], x = '__storage_test__'; storage.setItem(x, x); storage.removeItem(x); return true; } catch(e) { return false; } }
这里是你将如何使用它:
if (storageAvailable('localStorage')) { // Yippee! We can use localStorage awesomeness } else { // Too bad, no localStorage for us }
如果您正在使用NPM,则可以使用可用的存储空间
npm install -S storage-available
然后使用这样的function:
if (require('storage-available')('localStorage')) { // Yippee! We can use localStorage awesomeness }
免责声明 :MDN和NPM包的文档部分都是由我撰写的。
使用此function,您可以检查本地存储是否可用,并且可以控制可能的例外情况。
function isLocalStorageAvailable() { try { var valueToStore = 'test'; var mykey = 'key'; localStorage.setItem(mykey, valueToStore); var recoveredValue = localStorage.getItem(mykey); localStorage.removeItem(mykey); return recoveredValue === valueToStore; } catch(e) { return false; } }
这是一个简单的检查:
if(typeof localStorage === 'undefined'){
修改Joe的答案来添加一个getter使其更易于使用。 下面你简单地说: if(ls)...
Object.defineProperty(this, "ls", { get: function () { var test = 'test'; try { localStorage.setItem(test, test); localStorage.removeItem(test); return true; } catch(e) { return false; } } });
用这个来检查localStorage是否设置。 它帮助你获得本地存储的状态。
if( window.localStorage.fullName !== undefined){ //action }else{ }
- 如何将图像保存到localStorage并将其显示在下一页上?
- 如何查看或编辑localStorage
- HTML5本地存储与会话存储
- localStorage.getItem('item')比localStorage.item还是localStorage 好?
- QuotaExceededError:Domexception22:尝试将某些内容添加到超过配额的存储中
- Safari浏览器发生html5 localStorage错误:“QUOTA_EXCEEDED_ERR:DOMexception22:尝试向超出配额的存储添加内容。
- 如何findlocalStorage的大小
- localStorage,sessionStorage,session和cookies有什么区别?
- 如何将数组存储在localStorage中?