zoukankan      html  css  js  c++  java
  • HTML5 Web存储--localStorage/sessionStorage

    HTML5提供了2种在客户端存储的方法:
     
    1、localStorage --没有时间限制的数据存储
    2、sessionStorage --针对一个session的数据存储,会话结束时会被清空
    一、作用域
     
    作用域
    localStorage在相同的协议、主机名、端口下,就能读取/修改到同一份localStorage数据
    sessionStorage在上述的条件下还要求在同一个窗口,也就是只要关闭了浏览器(包括关闭标签页),就会被清空
    二、VS cookie:
    1、存储数据更多 ( cookie只有4k,localStorage一般5M )
    2、速度快,效率高
    三、数据结构
    采用标准键值对数据结构,键是唯一的,重复以同一个键来赋值的话,会覆盖上次的值。
    四、localStorage方法
    1、特性
    (1)只支持string类型
    (2)浏览器在隐私模式下不可读取
    (3)localStorage不能被爬虫抓取到
    2、3种写入方法
    var storage=window.localStorage;
    第一种://写入a字段      storage["a"]=1;
    第二种://写入b字段       storage.b=1;
    第三种://写入c字段        storage.setItem("c", 3);
    3、删除
    全部清除           window.localStorage.clear( )
    对某个键值对的删除              window.localStorage.removeItem('a’)
    4、特别注意这些操作都只能对同一个域下的数据进行操作
    五、sessionStorage方法
    1、VS localStorage
    相同:各种语法特性都相同
    不同:localStorage里存的数据没有过期的时间设置,而sessionStorage里存储的数据在页面会话结束时被清除
    六、localStorage的跨域问题
    这一点我想重点介绍一下,因为项目设计,所以研究里好几天,但是最后由于项目不适用没有使用,但是一些知识想整理出来
    这里我们使用HTML5的postMessage并结合iframe进行跨域
    我们模拟一个场景:将http://a.com/index.html页面中的用户信息带到http://b.com/index.html中去
    1、流程如图所示:
     
    image2
    1)、在a.com里插入一个iframe,并指向b.com
    2)、a.com通过postMessage传递指定格式的消息给b.com
    3)、b.com解析a.com传递过来的消息内容,调用localStorage API操作本地数据
    4)、b.com使用localStorage中的数据
    2、细小知识点
    我使用的过程中遇到的一些小的知识点我也想和大家一起学习一下
    获取iframe时,我们可以使用window.frames来获取全部iframe对象,相当于document.getElementsByTagName( "iframe" )
    3、代码(此处只写js代码)
    http://a.com/index.html
    var domain = 'http://b.com/index.html'; //定义目标域名
    var message = {userId:1,userName:"wendy"}; //你在这里也可以传递一些数据,obj等
    //发送消息和目标URI
    window.frames[0].contentWindow.postMessage(message,domain); //假设页面上只有一个iframe
    http://b.com/index.html
    //响应事件
    window.addEventListener('message',function(event) {
        if(event.origin !== 'http://a.com/index.html') return;
        console.log('message received:  ' + event.data,event);//这里的event.data就是刚刚传过来的用户信息
    },false);
    4、结果
    结果我这样操作后,event.data里面拿不到任何有用信息,为什么呢?
    因为我的需求是从http://a.com/index.html跳转到http://b.com/index.html,在打开http://b.com/index.html时a.com已经销毁,也就没有那样的iframe存在来发送数据,所以拿不到数据;也就是说必须得在父页面中包含子页面时这种方案才可行。
    前端小白,以上是我的个人理解,如有错误,忘批评指正,谢谢大家
    参考资料:
  • 相关阅读:
    在线学习VIM
    对三叉搜索树的理解
    Suffix Tree
    Skip list
    中文分词算法
    土豆的seo
    Gentle.NET文档(链接)
    a标签的link、visited、hover、active的顺序
    html dl dt dd标签元素语法结构与使用
    WEBZIP为什么打不开网页
  • 原文地址:https://www.cnblogs.com/September-9/p/7079560.html
Copyright © 2011-2022 走看看