关于safiry开启无痕浏览时本地存储的处理

在移动端做交互,我们经常会用到本地存储localstorage来存储变量。但是在safiry浏览器开启无痕浏览模式时,本地存储不管用了。那么是不是就不能行了呢。当然不是。除了localstorage和sessionStorage之后外,我们知道,可以使用cookie来存储。在safiry开启无痕浏览的时候,本地存储会抛异常,所以可以通过捕获异常来判断是否使用cookie存储。

var tracelesStorage=function(name, val){ 
            if(arguments.length> 1){
                try{
                    localStorage.setItem(name, val);
                }catch(e){
                    setCookie(name,val,'d365');//抛出异常使用cookie存储
                }

            }
            else {
                var dataStr='';
                try{
                    localStorage.setItem('cookieTest', 'test');//判断是否支持存储
                    dataStr = localStorage.getItem(name);
                }catch(e){
                    dataStr = getCookie(name)//同样抛出异常我们使用cookie去取值
                }

                return dataStr;
            }
        }
    //下面是cookie存储的取值和存值

        var getCookie=function(name)//取cookies值
        {
            var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
            if(arr=document.cookie.match(reg)){
                if(!arr[2]){
                     return null ;
                }else if(arr[2] !='null'){
                     return unescape(arr[2]) ;
                }else{
                     return null ;
                };
            }else{
                return null;
            }

        }
        //存储Cookie
        var setCookie=function(name, value, time){
            var strsec = getsec(time);
            var exp = new Date();
            exp.setTime(exp.getTime() + strsec * 1);
            document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString()+";path=/";
        }
          var  getsec=function(str) {
            var str1 = str.substring(1, str.length) * 1;
            var str2 = str.substring(0, 1);
            if (str2 == "s") {
                return str1 * 1000;
            } else if (str2 == "h") {
                return str1 * 60 * 60 * 1000;
            } else if (str2 == "d") {
                return str1 * 24 * 60 * 60 * 1000;
            }
        }

//如果要清除存储,同样抛异常的时候就需要清除cookie
var clearStorage=function(name){    // 清除存储
            if(!name) { return false;}
            try{
                localStorage.setItem('cookieTest', 'test');//正常清除
                localStorage.removeItem(name);
            }catch(e){
                document.cookie = name + "=" + null + ";expires=" + 0+";path=/";//抛出异常,存储到了cookie,因此清除cookie。
            }

        }

“`

如果用sessionStorage也是同样的思路。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值