关于微信中的localStorage及使用cookie的解决方案

最近搞微信公众号的开发,需要本地存储数据,这就产生了一个问题,微信中能不能用localStorage存数据?查找了网上资料,简单总结一下。

▂▂▂▂__▂▂_▂▂▂_▂▂▂_▂▂▂_▂▂▂_▂▂▂_▂▂▂_▂▂▂_▂▂▂_▂▂▂_▂▂▂_▂▂▂_▂▂▂_▂▂▂_▂▂▂__▂▂▂▂

首先,微信环境其实是个webview组件而已,并不是真正意义上的什么内置浏览器。

安卓版微信直接调用系统浏览器内核,它是用chrome改造做的一套WKwebView,概念上类似是一套组建, iOS则是调用safari,

所以把微信内置的第三方网页看成是在整个浏览器环境下的想法是错误的。

═∞═ ═∞══∞═ ═∞══∞═ ═∞══∞═ ═∞══∞═ ═∞══∞═ ═∞═

其次,微信内置第三方网页中localStorage等, 是可以用,

有些机型不能存储信息到localStorage中,或者是页面一旦关闭或微信退出之后,存储的信息也失效了。
百度上也有很多人吐槽这个问题,cookie和session都能解决。

═∞═ ═∞══∞═ ═∞══∞═ ═∞══∞═ ═∞══∞═ ═∞══∞═ ═∞═

于是想到用cookie来替代localStorage,存储一些简单的数据。上网查找了一下,发现w3school上已有不错的解决方案。

//设置cookie
function setCookie(c_name,value,expiredays)
{
var exdate=new Date()
exdate.setDate(exdate.getDate()+expiredays)
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}

//取回cookie
function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=")
  if (c_start!=-1)
    { 
    c_start=c_start + c_name.length+1 
    c_end=document.cookie.indexOf(";",c_start)
    if (c_end==-1) c_end=document.cookie.length
    return unescape(document.cookie.substring(c_start,c_end))
    } 
  }
return ""
}

 

示例:

//设置cookie,有效期为365天
setCookie('username','123',365);

//取回,若cookie失效,将返回空
getCookie('username');

 

经过测试,完全兼容,没有出现问题,但是这个微信退出重新登录缓存就又没了,  有需要的小伙伴可以参考下。

贴上原文地址:https://my.oschina.net/crazymus/blog/425650

posted @ 2018-07-27 12:54  林木慕风  阅读(23032)  评论(0编辑  收藏  举报