2013-01-09 63 views
0

這裏是我的代碼:奇怪的行爲檢查Web存儲可用性

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 
} 

我真的不知道發生了什麼事情,但是當我嘗試從一個設備使用此代碼加載頁面的第一次,我的其他代碼不能按照它應該的方式工作。但是,如果我將它評論出來,那麼首次訪問該頁面時一切正常。然後,我可以取消註釋,重新加載頁面,並且所有內容都將繼續有效。這真的是我能描述發生的最好的事情。

+0

'typeof'運算符返回一個字符串(例如''undefined''),它永遠不會等於'undefined'。另外,你不應該在if/else塊內聲明變量,因爲javascript沒有塊範圍。 – jbabey

+0

感謝您的提示!我做了更改,但我仍然遇到同樣的問題。 –

+1

其他小事情 - 你應該考慮使用原生的'JSON.parse()'而不是'$ .parseJSON','localStorage.getItem()'而不是括號/點符號,並且你不會將'hashes'推入'localStorage '在'else'語句中。 – jbabey

回答

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關於清理我的代碼的提示!

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

這是相當粗糙,你tweek它,使其更安全,響應您的需求你進去

  • 把try/catch語句和設置功能,你不想寫操作來影響你的程序