Check if localStorage is available

后端 未结 8 1318
悲哀的现实
悲哀的现实 2020-11-27 02:34

I know there has been many questions about checking for localStorage but what if someone manually shuts it off in their browser? Here\'s the code I\'m using to

相关标签:
8条回答
  • 2020-11-27 03:12

    With this function you can check if localstorage is available or not, and you keep under control the possible exceptions.

    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;
        }
    }
    
    0 讨论(0)
  • 2020-11-27 03:13

    Modifying Joe's answer to add a getter makes it easier to use. With the below you simply say: 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;
        }
      }
    });
    
    0 讨论(0)
  • 2020-11-27 03:23

    Feature-detecting local storage is tricky. You need to actually reach into it. The reason for this is that Safari has chosen to offer a functional localStorage object when in private mode, but with it's quotum set to zero. This means that although all simple feature detects will pass, any calls to localStorage.setItem will throw an exception.

    Mozilla's Developer Network entry on the Web Storage API's has a dedicated section on feature detecting local storage. Here is the method recommended on that page:

    function storageAvailable(type) {
        try {
            var storage = window[type],
                x = '__storage_test__';
            storage.setItem(x, x);
            storage.removeItem(x);
            return true;
        }
        catch(e) {
            return false;
        }
    }
    

    And here is how you would use it:

    if (storageAvailable('localStorage')) {
        // Yippee! We can use localStorage awesomeness
    }
    else {
        // Too bad, no localStorage for us
    }
    

    If you are using NPM, you can grab storage-available using

    npm install -S storage-available
    

    then use the function like so:

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

    Disclaimer: Both the documentation section on MDN and the NPM package were authored by me.

    0 讨论(0)
  • 2020-11-27 03:24

    Use this to check localStorage is set or not. Its help you to get status of Localstorage.

        if( window.localStorage.fullName !== undefined){
    
               //action
       }else{
              }
    
    0 讨论(0)
  • 2020-11-27 03:25

    MDN updated the storage detect function. In 2018, it's more reliable:

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

    Browsers that support localStorage will have a property on the window object named localStorage. However, for various reasons, just asserting that property exists may throw exceptions. If it does exist, that is still no guarantee that localStorage is actually available, as various browsers offer settings that disable localStorage. So a browser may support localStorage, but not make it available to the scripts on the page. One example of that is Safari, which in Private Browsing mode gives us an empty localStorage object with a quota of zero, effectively making it unusable. However, we might still get a legitimate QuotaExceededError, which only means that we've used up all available storage space, but storage is actually available. Our feature detect should take these scenarios into account.

    See here for a brief history of feature-detecting localStorage.

    0 讨论(0)
  • 2020-11-27 03:26

    Use modernizr's approach (you might want to change my function name to something better):

    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
    }
    

    It's not as concise as other methods but that's because it's designed to maximise compatibility.

    The original source: https://github.com/Modernizr/Modernizr/blob/master/feature-detects/storage/localstorage.js

    Working example: http://jsfiddle.net/6sm54/2/

    0 讨论(0)
提交回复
热议问题