87

ls existIE7 中的以下代码警报:

if(window.localStorage) {
    alert('ls exists');
} else {
    alert('ls does not exist');
}

IE7 并不真正支持本地存储,但这仍然提醒它支持。也许这是因为我在 IE7 浏览器和文档模式下使用 IE9 使用 IE9 开发人员工具。或者也许这只是测试是否支持 LS 的错误方法。什么是正确的方法?

此外,我不想使用 Modernizr,因为我只使用了一些 HTML5 功能,并且加载大型脚本只是为了检测对这些东西的支持是不值得的。

4

11 回答 11

101

您不必使用modernizr,但您可以使用他们的方法来检测是否localStorage支持

github 上的modernizr
测试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;
    }
});

使用当前源代码更新

于 2012-06-26T19:18:28.197 回答
46
if(typeof Storage !== "undefined")
  {
  // Yes! localStorage and sessionStorage support!
  // Some code.....
  }
else
  {
  // Sorry! No web storage support..
  }
于 2012-06-26T19:15:58.673 回答
16

此功能工作正常:

function supports_html5_storage(){
    try {
        return 'localStorage' in window && window['localStorage'] !== null;
    } catch(e) {
        return false;
    }
}

资料来源:www.diveintohtml5.info

于 2013-08-15T10:02:01.807 回答
15

此外,我不想使用 Modernizr,因为我只使用了一些 HTML5 功能,并且加载大型脚本只是为了检测对这些东西的支持是不值得的。

要减小 Modernizr 文件大小,请在http://modernizr.com/download/上自定义文件以满足您的需求。Modernizr 的本地存储版本只有 1.55KB。

于 2013-04-01T14:16:12.537 回答
10

尝试window.localStorage!==undefined

if(window.localStorage!==undefined){
    //Do something
}else{
    alert('Your browser is outdated!');
}

您也可以使用typeof window.localStorage!=="undefined",但上面的语句已经做到了

于 2012-06-26T19:15:10.980 回答
8

我没有在答案中看到它,但我认为很高兴知道您可以轻松地使用 vanilla 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 功能时,您将首先测试父对象,然后测试您的代码使用的方法。

于 2016-07-26T20:52:13.440 回答
3

尝试 catch 将完成这项工作:

    try{
       localStorage.setItem("name",name.value);
       localStorage.setItem("post",post.value);
       }
    catch(e){
       alert(e.message);    
       }
于 2013-08-10T09:02:01.337 回答
1

尝试:

if(typeof window.localStorage != 'undefined') {
}
于 2012-06-26T19:16:12.277 回答
1
if (window.localStorage){

   alert('localStorage is supported');
   window.localStorage.setItem("whatever", "string value");

}
于 2013-08-13T08:44:30.550 回答
1

修改 Andrea 的答案以添加 getter 使其更易于使用。使用以下内容,您只需说: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>

于 2016-12-30T03:04:18.193 回答
0

我知道我参加聚会有点晚了,但是我编写了一些有用的函数并将其放入名为“manage_storage.js”的文件中。我希望它们对你们有用,因为它们对我很有帮助。

请记住:您正在寻找的功能(回答这个问题)是isLclStorageAllowed.

所以事不宜迟,这是我的代码:

/* 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] */
于 2020-01-24T12:21:15.267 回答