zoukankan      html  css  js  c++  java
  • H5 web存储

    H5提供了两种在客户端存储数据的方式:
    localStorage 持久化的本地存储(浏览器关闭重新打开数据依然存在)
    sessionStorage 针对一个session的本地存储
    之前这些都是由cookie来完成的,cookie的特点是存储量小,在服务器和客户端之间来回传递,传输效率不高。一般可以在判断注册的用户是否登录该本网站。
    webStorage API 继承于Window对象,并提供了两个新的属性-Window.localStorage 和 Window.sessionStorage.
    webStorage的优势:

    1. 相比cookie存储容量增加
    2. 可以将请求的表单数据存于本地,减少http请求,节约带宽
    3. webStorage拥有易用的API

    webStorage的局限性:

    1. 不同浏览器webStorage 和LocalStorage的大小不统一。
    2. 在浏览器的隐私模式下面是不可读取的
    3. 本质上是对字符串的读取,因此存储内容过多时页面会变卡
    4. 不能被爬虫抓取到

    使用webStorage
    1.存储数据:
      localStorage.name = 'value';
      localStorage['name'] = 'value';
      localStorage.setItem('name','value');
      注意键和值总是字符串。建议使用webStorage API(setItem,getItem,removeItem,key,length)
    2.获取数据:
      var value = localStorage.getItem('name');
      var value = localStorage.name;
      var value = localStorage['name'];
    3.删除数据:
      清空所有数据
        localStorage.clear();
      删除特定数据;
        localStorage.removeItem('name');
    4.检测浏览器是否支持:
      function storageAvailable(type) {
        try {
          var storage = window[type],
          x = '__storage_test__';
          storage.setItem(x, x);
          storage.removeItem(x);
          return true;
        }
        catch(e) {
          return false;
        }
      }
      if (storageAvailable('localStorage')) {
        // Yippee! We can use localStorage awesomeness
      }
      else {
        // Too bad, no localStorage for us
      }
    5.就是存储对象了,我们需要进行转换为字符串存入,等到使用的时候取出再转为对象。
      var str = JSON.stringify(obj);
      localStorage.mydata = str;
      var obj = JSON.parse(localStorage.mydata);

    6.监听 storage 事件

    可以通过监听 window 对象的 storage 事件并指定其事件处理函数,当页面中对 localStorage 或 sessionStorage 进行修改时,则会触发对应的处理函数。

    window.addEventListener('storage',function(e){
        console.log('key='+e.key+',oldValue='+e.oldValue+',newValue='+e.newValue);
    })
    触发事件的时间对象(e 参数值)有几个属性:

    key : 键值。
    oldValue : 被修改前的值。
    newValue : 被修改后的值。
    url : 页面url。
    storageArea : 被修改的 storage 对象。
    注意:在谷歌浏览器中,需要在不同标签页中修改 storage 才会触发该事件,即 网页A 监听该事件,在 网页B 中修改 localStorage,则 网页A 会触发事件函数。但是在 IE 中,在同个网页修改 localStorage 都会触发该事件。

    调试

    谷歌浏览器自带调试工具(chrome devtools)非常好用,可以用来调试 localStorage 和 sessionStorage。打开浏览器按f12调出调试工具,可以看到 Application ,点击打开可以看到左边栏有 Storage,包括了 localStorage、sessionStorage、IndexedDB等,选中我们要调试的网站域名,可以看到右边有对应的 key 和 value,可以通过右键进行编辑或删除等。

    兼容

    IE8 以上就兼容,但是比较特别,需要在服务器上打开的才支持,直接双击打开文件的 file:// 是不兼容的。

    到了 IE11 才支持 file:// 下打开的,其他浏览器的支持程度都很高,包括在手机上的兼容。具体兼容可查看:http://caniuse.com/#search=localstorage

  • 相关阅读:
    Ubuntu adb devices :???????????? no permissions (verify udev rules) 解决方法
    ubuntu 关闭显示器的命令
    ubuntu android studio kvm
    ubuntu 14.04版本更改文件夹背景色为草绿色
    ubuntu 创建桌面快捷方式
    Ubuntu 如何更改用户密码
    ubuntu 14.04 返回到经典桌面方法
    ubuntu 信使(iptux) 创建桌面快捷方式
    Eclipse failed to get the required ADT version number from the sdk
    Eclipse '<>' operator is not allowed for source level below 1.7
  • 原文地址:https://www.cnblogs.com/Jerry-MrNi/p/6899271.html
Copyright © 2011-2022 走看看