xiezhihai7 2016-06-28 01:33 采纳率: 0%
浏览 10122

javascript localStorage 读取为空

第一次打开页面时读取到的localStorage值为空吗,只有第二次会读取到?
我请空浏览器缓存后打开页面,getItem读取到的localStorage为空,再次刷新后就有了,有办法第一次就能获取到吗?

代码如下:


/**
 * [setImgArr :设置需要本地缓存的图片数组]
 * 注意:图片按数组顺序存入localStroage,
 *       使用name="cacheswitch"属性作为标识
 * [getImgArr :将缓存图片取出,放入数组中]      
 * @type {Array}
 */

var setImgArr = [],
    getImgArr = [];
/**
 * [getImgSrc 获取页面中有标识的图片的src,添加到本地缓存数组中,并从本地缓存中取出赋值给img src]
 * 
 */
getImgSrc();
function getImgSrc() {
    $('img').each(function() {
        var attr=$(this).attr("name");
        if(attr=="cacheImg") {
            setImgArr.push($(this).attr("src"));
        }
    });

    for(i in setImgArr) {
        setImg(setImgArr[i]);//设置图片缓存
        getImg(setImgArr[i]);//获取图片缓存
    }

    var attrCache=document.getElementsByName("cacheImg");
    for(var i=0;i<attrCache.length;i++) {
        // attrCache[i].src=getImgArr[i];
    }
}

/**
 * [setImg 设置本地图片缓存]
 * @return {[type]} [description]
 */
function setImg(key) {
    var img=document.createElement('img');
    img.addEventListener('load',function(){
        //创建一个canvas
        var imgCanvas=document.createElement("canvas"),
            imgContext=imgCanvas.getContext("2d");
        //确保canvas元素的大小和图片尺寸一致
        imgCanvas.width=this.width;
        imgCanvas.height=this.height;
        //渲染图片到canvas中,使用canvas的drawImage()方法
        imgContext.drawImage(this,0,0,this.width,this.height);
        //用canvas的dataUrl的形式取出图片,imgAsDataURL是一个base64字符串
        var imgAsDataURL=imgCanvas.toDataURL("image/png");
        //保存到本地存储中
        //使用try-catch()查看是否支持localstorage
        try {
            localStorage.setItem(key,imgAsDataURL);//将取出的图片存放到localStorage
        }catch(e) {
            console.log("Storage failed:"+e);//存储失败
        }
    },false);
    img.src=key;
}
/**
 * [getImg 从本地缓存获取图片并且渲染]
 * @param  {[type]} key [localStorage中的键名称]
 * @return {[type]}     [存储值-base64的字符串]
 */

function getImg(key) {
    var srcStr = localStorage.getItem(key);//从localStorage中取出图片
    console.log(getImgArr);
    getImgArr.push(srcStr);

}

附上代码截图:

图片说明
图片说明

  • 写回答

1条回答 默认 最新

  • Go 旅城通票 2016-06-28 02:31
    关注

    第一次访问没有那个键肯定localStorage返回null了。。搞清楚执行循序先。

    评论

报告相同问题?

问题事件

  • 请详细说明问题背景 8月10日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器