0

これが私のコードです:

if(typeof(Storage)!==undefined) {
    // Web storage support
    if(localStorage.hashes != "") {
        var hashes = jQuery.parseJSON(localStorage.hashes);
        for (var i = 0; i < hashes.length; i++) {
            // Do stuff here
        }
    }
    else {
        var hashes = [];
    }
}
else {
    // No web storage support
}

何が起こっているのかよくわかりませんが、デバイスからこのコードを含むページを初めて読み込もうとすると、コードの残りの部分が正常に機能しません。ただし、コメントアウトすると、初めてページにアクセスしてすべてが機能します。その後、コメントを外してページをリロードすると、すべてが引き続き機能します。これは、何が起こっているのかを説明できる最高のものです。

4

2 に答える 2

0

これを投稿する前に、もう少しデバッグを行うことができたと思います。

ログの記録/チェックの追加を試みましたか (この問題の正確な原因とエラーの内容を確認するため)。

しかし、私たちはここにいるので、ここに localStorage に関する私のヒントがあります:

  • modernizr を使用する (http://modernizr.com/)
if(Modernizr.localstorage){ /* Your code */}
  • いくつかの一般的な get および set 関数を作成する
function get(key) {

   if(Modernizr.localstorage) { 
      if(localStorage[key] != null) {
        return localStorage[key];
      }
   }
   return null;
}

function set(key, value) {

   if(Modernizr.localstorage) { 
      localStorage[key] = value;
   }
   return null;
}

これはかなり大雑把です。安全性を高め、ニーズに対応するために微調整します

  • get および set 関数内に try/catch を配置します。書き込み操作がプログラムに影響を与えないようにします。
于 2013-01-09T21:18:56.117 に答える
0

私はそれを考え出した!したがって、上記のコードでは、利用可能な localStorage があるかどうかを確認し、利用できる場合は、そこにいくつかのハッシュが格納されていると想定しています。ハッシュがまだ保存されていないため、これは明らかに最初の訪問で問題を引き起こします。したがって、それらがあるかどうかを確認する必要があります。ある場合は for ループを実行し、そうでない場合は空の配列に設定するだけです。そのようです!

if(typeof(Storage) !== "undefined") {
    // Web storage support
    if(localStorage.hashes != "") {
        hashes = JSON.parse(localStorage.getItem("hashes"));
        if(hashes) {
            for (var i = 0; i < hashes.length; i++) {
                // Do Stuff
            }
        } else {
            hashes = [];
        }
    }
    else {
        hashes = [];
    }
}
else {
    // No web storage support
    hashes = [];
}

コードをクリーンアップするためのヒントを提供してくれた jbabey に感謝します。

于 2013-01-09T21:20:33.070 に答える