检查localStorage的可用(Check if localStorage is availab

2019-09-02 04:50发布

我知道有许多关于检查许多问题localStorage但如果有人手动关闭它关闭在其浏览器? 下面是我使用来检查代码:

localStorage.setItem('mod', 'mod');
if (localStorage.getItem('mod') != null){
    alert ("yes");
    localStorage.removeItem('mod');
}else{
    alert ("no");
}

简单的功能和它的作品。 但是,如果我进入我的Chrome设置,选择选项“不保存数据”(我不记得确切它叫什么),当我尝试运行这个功能,我得到什么,但Uncaught Error: SecurityError: DOM Exception 18 。 那么,有没有一种方法来检查的人已是完全关闭?

更新:这是我试过的第二个功能,我仍然没有得到响应(警报)。

try {
 localStorage.setItem("name", "Hello World!");
} catch (e) {
 if (e == QUOTA_EXCEEDED_ERR) {
     alert('Quota exceeded!');
}
}

Answer 1:

使用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/



Answer 2:

我检查localStorage之前依赖于它的任何行动定义:

if (typeof localStorage !== 'undefined') {
    var x = localStorage.getItem('mod');
} else {
    // localStorage not defined
}

更新:

如果您需要验证该功能是存在的,并且它也没有关闭,你必须使用一个更安全的方法。 为了万无一失:

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
}


Answer 3:

特征检测本地存储是棘手的。 你需要真正达到了进去。 这样做的原因是,Safari浏览器选择提供一个功能localStorage私人模式下的对象, 但与它的定额设置为零 。 这意味着,尽管所有简单的功能检测将传递到任何电话localStorage.setItem会抛出异常。

Web存储API的Mozilla的开发者网络项目有一个对特征检测本地存储专用部分 。 下面是该网页推荐的方法:

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

然后使用功能,像这样:

if (require('storage-available')('localStorage')) {
    // Yippee! We can use localStorage awesomeness
}

免责声明 :无论在MDN文档部分和NPM包都由我创作。



Answer 4:

MDN 更新存储检测功能。 在2018年,它更可靠:

function storageAvailable() {
    try {
        var storage = window['localStorage'],
            x = '__storage_test__';
        storage.setItem(x, x);
        storage.removeItem(x);
        return true;
    }
    catch(e) {
        return e instanceof DOMException && (
            // everything except Firefox
            e.code === 22 ||
            // Firefox
            e.code === 1014 ||
            // test name field too, because code might not be present
            // everything except Firefox
            e.name === 'QuotaExceededError' ||
            // Firefox
            e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
            // acknowledge QuotaExceededError only if there's something already stored
            storage && storage.length !== 0;
    }
}

支持localStorage的浏览器将有一个名为localStorage的窗口对象上的属性。 然而,由于种种原因,只是声称属性存在可能会抛出异常。 如果它确实存在,这仍然不能保证localStorage的实际可用,各种浏览器提供的是禁用的localStorage设置。 所以,浏览器可以支持本地存储,而不是将其提供给网页上的脚本。 这方面的一个例子是Safari浏览器,这在隐私浏览模式为我们提供了具有零配额空localStorage的对象,有效地使之无法使用。 但是,我们仍然可能会得到一个合法的QuotaExceededError,只意味着我们已经用完了所有可用的存储空间,而存储是实际可用 。 我们的功能检测应该把这些情形考虑在内。

在这里看到一个功能检测localStorage的简史 。



Answer 5:

有了这个功能,你可以检查的localStorage是可用的,而且你控制住可能的例外。

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;
    }
}


Answer 6:

下面是一个简单的检查:

if(typeof localStorage === 'undefined'){



Answer 7:

修改乔的回答添加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;
    }
  }
});


Answer 8:

使用此检查localStorage的设置与否。 它帮助你得到的localStorage的状态。

    if( window.localStorage.fullName !== undefined){

           //action
   }else{
          }


文章来源: Check if localStorage is available