87

ls existIE7の次のコードアラート:

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

IE7は実際にはローカルストレージをサポートしていませんが、それでもサポートしていることを警告します。おそらくこれは、IE7ブラウザでIE9を使用していて、IE9開発者ツールを使用してドキュメントモードを使用しているためです。あるいは、これはLSがサポートされているかどうかをテストするための間違った方法かもしれません。正しい方法は何ですか?

また、私はいくつかのHTML5機能しか使用しておらず、大きなスクリプトをロードすることは、それらのいくつかのサポートを検出するだけの価値がないため、Modernizrを使用したくありません。

4

11 に答える 11

101

modernizr を使用する必要はありませんが、localStorageサポートされているかどうかを検出する方法を使用できます。

github
テストでのmodernizrlocalStorage

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

また、私は HTML5 機能をいくつかしか使用していないため、Modernizr を使用したくありません。大きなスクリプトをロードしても、これらのいくつかの機能のサポートを検出するだけの価値はありません。

Modernizr のファイル サイズを小さくするには、必要に応じてhttp://modernizr.com/download/でファイルをカスタマイズします。Modernizr の localStorage 専用バージョンは 1.55 KB です。

于 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

回答には表示されませんでしたが、バニラ JS または jQuery をこのような単純なテストに簡単に使用できることを知っておくとよいと思います。Modernizr は大いに役立ちますが、それがなくてもクリーンなソリューションがあります。

jQueryを使用する場合は、次のことができます。

var _supportsLocalStorage = !!window.localStorage
    && $.isFunction(localStorage.getItem)
    && $.isFunction(localStorage.setItem)
    && $.isFunction(localStorage.removeItem);

または、純粋な Vanilla 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 (window.localStorage){

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

}
于 2013-08-13T08:44:30.550 に答える
1

Try:

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

アンドレアの回答を変更してゲッターを追加すると、使いやすくなります。以下を使用すると、次のように簡単に言うことができます。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 に答える