sessionStorage在项⽬中的应⽤
1. 本地存储
Cookie(局限性):⽤户可以禁⽤cookie,最多只能存储4kb,cookie有过期时间的(⼀般我们设置的时间最长1个⽉,⽤户使⽤杀毒软件也可以清除我们的cookie)LocalStorage:持久化存储到本地,没有过期时间,最⼤可存储5MB
都是采⽤的明⽂存储,我们在控制台(Resource)下可以看到存储的信息,所以本地存储都是不安全的(不要存储重要的信息,如果需要的话,我们需要对重要的信息进⾏严格的加密—md5加密)
WebStorage(localStorage(常⽤,sessionStorage))
由于我们的localStorage可以存储很多的数据,我们在项⽬中把不经常更新的数据进⾏存储,下⼀次打开页⾯,先把本地缓存的数据展⽰,减少对于服务器的请求压⼒---移动端的本地缓存
$("#productCouponList tr").each(function() {
if ($(this).find('input').is(':checked')) {
var Id = $(this).attr('data-id');
var Name = $(this).attr('data-name');
var Category = $(this).attr('data-category');
var item = {
id: Id,
name: Name,
category: Category
};
VoucherList.push(item);
var jsonVoucherStr = JSON.stringify(VoucherList);
sessionStorage.setItem("VoucherList", jsonVoucherStr);
var VoucherValue = Item("VoucherList")
var VoucherObj = JSON.parse(VoucherValue);
$("#speCouponList").html("");
var template = $("#speCouponListTemplate").html();
var datalist = dataHelper.setJson(null, 'lists', VoucherObj);
Mustache.parse(template);
var render = der(template, jQuery.parseJSON(datalist));
$("#speCouponList").append(render);
}
});
备注知识点:
1、JSON.parse()⽤于从⼀个字符串中解析出json对象
2、JSON.stringify()⽤于从⼀个对象解析成字符串
3、jQuery.parseJSON(jsonString) : 将格式完好的JSON字符串转为与之对应的JavaScript对象
4、JSON.parse()和jQuery.parseJSON()的区别:
有的浏览器不⽀持JSON.parse()⽅法,使⽤jQuery.parseJSON()⽅法时,在浏览器⽀持时会返回执⾏JSON.parse()⽅法的结果,否则会返回类似执⾏eval()⽅法的结果。
html5中的Web Storage包括了两种存储⽅式:sessionStorage和localStorage。
sessionStorage⽤于本地存储⼀个会话(session)中的数据,这些数据只有在同⼀个会话中的页⾯才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是⼀种持久化的本地存储,仅仅是会话级别的存储。
⽽localStorage⽤于持久化的本地存储,除⾮主动删除数据,否则数据是永远不会过期的。
web storage和cookie的区别
Web Storage的概念和cookie相似,区别是它是为了更⼤容量存储设计的。Cookie的⼤⼩是受限的,并且每次你请求⼀个新的页⾯的时候Cookie都会被发送过去,这样⽆形中浪
费了带宽,另外cookie还需要指定作⽤域,不可以跨域调⽤。
除此之外,Web Storage拥有setItem,getItem,removeItem,clear等⽅法,不像cookie需要前端开发者⾃⼰封装setCookie,getCookie。
但是Cookie也是不可以或缺的:Cookie的作⽤是与服务器进⾏交互,作为HTTP规范的⼀部分⽽存在,⽽Web Storage仅仅是为了在本地“存储”数据⽽⽣(来⾃@otakustay 的纠
正)
html5 web storage的浏览器⽀持情况
浏览器的⽀持除了IE7及以下不⽀持外,其他标准浏览器都完全⽀持(ie及FF需在web服务器⾥运⾏),值得⼀提的是IE总是办好事,例如IE7、IE6中的UserData其实就是
javascript本地存储的解决⽅案。通过简单的代码封装可以统⼀到所有的浏览器都⽀持web storage。
要判断浏览器是否⽀持localStorage可以使⽤下⾯的代码:
if(window.localStorage){    alert("浏览⽀持localStorage") }else{    alert("浏览暂不⽀持localStorage") } //或者 if(typeof window.localStorage == 'undefined'){  alert("浏览暂不⽀持localStorage") }
localStorage和sessionStorage操作
localStorage和sessionStorage都具有相同的操作⽅法,例如setItem、getItem和removeItem等
localStorage和sessionStorage的⽅法
setItem存储value
⽤途:将value存储到key字段
⽤法:.setItem( key, value)
代码⽰例:
sessionStorage.setItem("key", "value");  localStorage.setItem("site", "js8.in");
getItem获取value
⽤途:获取指定key本地存储的值
⽤法:.getItem(key)
代码⽰例:
var value = Item("key");  var site = Item("site");
removeItem删除key
⽤途:删除指定key本地存储的值
⽤法:.removeItem(key)
代码⽰例:
clear清除所有的key/value
⽤途:清除所有的key/value
⽤法:.clear()
代码⽰例:
sessionStorage.clear();  localStorage.clear();
其他操作⽅法:点操作和[]
web Storage不但可以⽤⾃⾝的setItem,getItem等⽅便存取,也可以像普通对象⼀样⽤点(.)操作符,及[]的⽅式进⾏数据存储,像如下的代码:
var storage = window.localStorage; storage.key1 = "hello"; storage["key2"] = "world"; console.log(storage.key1); console.log(storage["key2"]);
localStorage和sessionStorage的key和length属性实现遍历
sessionStorage和localStorage提供的key()和length可以⽅便的实现存储的数据遍历,例如下⾯的代码:
var storage = window.localStorage; for (var i=0, len = storage.length; i  <  len; i++){    var key = storage.key(i);    var value = Item(key);    console.log(key + "=" + value); }
storage事件
storage还提供了storage事件,当键值改变或者clear的时候,就可以触发storage事件,如下⾯的代码就添加了⼀个storage事件改变的监听:
if(window.addEventListener){  window.addEventListener("storage",handle_storage,false); }else if(window.attachEvent){  window.attachEvent("onstorage",handle_storage); } function handle_storage(e){  if(!e){e=window.event;}  } storage事件对象的具体属性如下表:
Property Type Description
key String The named key that was added, removed, or moddified
oldValue Any The previous value(now overwritten), or null if a new item was added
newValue Any The new value, or null if an item was added
url/uri String The page that called the method that triggered this change
前⾔:
  因最近移动端开发过程中遇到⼀个运营提出的所谓技术难点需求,对于原⽣APP来说轻⽽易举,毕竟⾃⼰的APP⽤户操作指哪打哪,但是H5该怎么做?H5就实现不了么?对
于⼀个爱研究攻克这些前端棘⼿问题的我来说,我没尝试过,我是拒绝对提出需求者说实现不了,做不到之类的。
  是什么需求呢?--需求⽅要求⽤户在⼀个列表页浏览时,点击⼀个列表进⼊详情页,返回要求记录⽤户刚刚浏览的位置,⽽不是重新刷新页⾯到了页⾯顶部。(ps:如果⽤
户好不容易翻到了第⼏⼗、⼏百乃⾄⼏千条时,难道要⽤户再重头开始?可能这个时候跳出率就⾼了,这个分析的确挺有道理,⽆⼒反驳...)。
  那么开始脑洞⼤开了,当时脑⼦⾥出来各种解决⽅案:
  1、将浏览时的滚动位置存到cookie⾥,进到这个页⾯再取。那多久销毁呢?好像不灵活...pass
  2、将详情页通过ifram或者弹框⽅式引到当前页,通过操作关闭当前弹窗(那么在已经完成的页⾯上再重构,加操作按钮?那么加载效率和体验呢?...反正不看好)
  3、将浏览时的滚动位置传到服务器端,加载页⾯时,根据⽤户来取最后浏览的位置,各种参数传来调去(跟⽅案⼀很类似)
  4、通过H5本地存储的⽅式将数据存起来,需要时取值(没啥经验,先研究⼀下吧,好像挺靠谱)
  接下来先了解⼀下什么是本地存储吧!
  简介:
  HTML5 web 存储,⼀个⽐cookie更好的本地存储⽅式。
  ⾸先我们先了解⼀下: 
  什么是 HTML5 Web 存储?
  使⽤HTML5可以在本地存储⽤户的浏览数据。
  早些时候,本地存储使⽤的是 cookie。但是Web 存储需要更加的安全与快速. 这些数据不会被保存在服务器上,但是这些数据只⽤于⽤户请求⽹站数据上.它也可以存储⼤量的数据,⽽不影响⽹站的性能.
  数据以键/值对存在, web⽹页的数据只允许该⽹页访问使⽤。
  localStorage 和 sessionStorage
  客户端存储数据的两个对象为:
localStorage - 没有时间限制的数据存储
sessionStorage - 针对⼀个 session 的数据存储(关闭窗⼝,存储的数据清空)
  了解完sessionStorage之后是不是很符合我们的需求呢?将数据存到 session中,管你前进后退还是刷新,数据依然在,关闭窗⼝后再进页⾯才会清空数据,那么完全符合需求啊,看到这玩意简直激动快要泪奔了
  再理⼀下实现思路,①页⾯滚动,将滚动位置存到session中→②再次进到页⾯中,到session中取出上次保存的浏览位置→③滚动到对应位置
  这家伙简直好玩到嗷嗷叫啊,睁⼤眼睛看重点咯!
  这⾥只介绍setItem和getItem,当然还有什么removeItem删除key、clear清除所有的key/value操作。
  setItem存储value
  ⽤途:将value存储到key字段
  ⽤法:.setItem( key, value)
  代码⽰例:
jquery在项目里是干啥的sessionStorage.setItem("key", "value");  localStorage.setItem("site", "js8.in");
  getItem获取value
  ⽤途:获取指定key本地存储的值
  ⽤法:.getItem(key)
  代码⽰例:
var value = Item("key");  var site = Item("site");
//滚动时保存滚动位置
$(window).scroll(function(){
if($(document).scrollTop()!=0){
    sessionStorage.setItem("offsetTop", $(window).scrollTop());//保存滚动位置
   }
});
//onload时,取出并滚动到上次保存位置
{
  var _offset = Item("offsetTop");
  $(document).scrollTop(offsetTop);
};

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。