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 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统