检查Web存储可用性的奇怪行为

时间:2013-01-09 20:36:46

标签: javascript jquery

这是我的代码:

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
}

我真的不知道发生了什么,但是当我第一次尝试从设备加载带有此代码的页面时,我的其余代码将无法正常工作。但是,如果我发表评论,那么第一次访问该页面一切正常。然后,我可以取消注释,重新加载页面,一切都将继续工作。这是我能描述正在发生的事情的最佳方式。

2 个答案:

答案 0 :(得分:0)

我相信你可以在发布之前做一些调试。

您是否尝试过记录/添加检查(以查看此问题的确切来源以及错误是什么)?

但是既然我们在这里,这里是我对localStorage的提示:

  • 使用modernizr(http://modernizr.com/)
if(Modernizr.localstorage){ /* Your code */}
  • 制作一些通用的获取和设置功能
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;
}

这非常粗糙,你调整它以使其更安全并满足您的需求

  • 将try / catch放入get和set函数中,您不希望写操作影响您的程序

答案 1 :(得分: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提供有关清理我的代码的提示!