检查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{ }