zoukankan      html  css  js  c++  java
  • Safari无痕浏览影响localStorage

    最近项目中遇到一个问题,有一个登录页,点击登录后,公司两个土豪金都不能正常跳转(但是登录请求已经发送到服务器了),其他人的手机都正常。项目又要急着上线,内心这个抓狂啊。。最后静下心来,终于把问题给解决了。

    解决过程:

    由于服务器有接收到客户端的ajax请求,所以就看客户端是否收到服务器的响应,在回调的success函数下alert(data.code),发现是接收到响应的,并且data.code=0,满足跳转条件,所以在success的else中继续alert,最终将问题定位到 sessionStorage.setItem('loginPhone',loginPhone);这一句上面,sessionStorage是h5的特性,手机端浏览器一般都支持,通过alert(sessionStorage)、(sessionStorage.setItem)和alert(typeof(sessionStorage.setItem))  发现都正常,typeof(sessionStorage.setItem)得到的是一个function,既然存在sessionStorage,又为什么不能正常执行呢。最后还是通过度娘找到了问题的根源---Safari无痕浏览会影响localStorage。所以只需要将这一句稍作修改即可

     try {
                    sessionStorage.setItem("loginPhone",loginPhone);
                } catch (e) {
                   alert("您处于无痕浏览,无法为您跳转");
                }

    以下是修改之前的代码:

     var loginPhone;
    
        function submitBindInfo(){
            if( checkSubmitMobile($("#phone-wrap")) &&  checkCode() &&checkContract())
            {
                var param={
                    phone:loginPhone,
                    authcode:$("#verifycode").val()
                };
                $.ajax({
                    type:"POST",
                    url:"/portal/member/login.do",
                    data:param,
                    dataType:"json",
                    timeout: 20000,
                    error:function(XMLHttpRequest, textStatus, errorThrown){
                        if(XMLHttpRequest.status==408){
                            alert("系统繁忙,请稍后尝试");
                           
                        }else{
                            alert(XMLHttpRequest.status+"错误");
                        }
    
                    },
                    success:function(data){
                        doSuccess(data);
                    }
                });
            }
        }
        function doSuccess(data){
            if(data.code!=0){
                loginFailCallBack(data.desc);
            }else{
    
                sessionStorage.setItem('loginPhone',loginPhone);
                doRedirct();
            }
        }
        function doRedirct(){
            switch (hash){
                case "#member" :
                    window.location.href="/portal/member/showMember.do";
                    break;
                case "#myOrder" :
                    window.location.href="/portal/myorder/showOrder.do";
                    break;
                case "#myCoupon" :
                    window.location.href="/portal/mycoupon/showCoupon.do";
                    break;
                default :
                    window.location.href="/portal/sinopec/step0.do";
                    break;
            }
        }
    

      

  • 相关阅读:
    关于Hyper-V备份的四大注意事项
    未找到导入的项目,请确认 <Import> 声明中的路径正确
    IDC门外汉-单线、双线、智能多线、BGP的区别
    国内主流云主机比较
    Error : The specified component was not reported by the VSS writer (Error 517) in Windows Server 2012 Backup
    [MSDN] Windows Server 2012 R2 简/繁/英下载
    深入浅出VC++串口编程之基于Win32 API
    Remon Spekreijse CSerialPort串口类的修正版2014-01-10
    Remon Spekreijse CSerialPort用法
    “CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明)
  • 原文地址:https://www.cnblogs.com/liujufu/p/5371667.html
Copyright © 2011-2022 走看看