IOS 内置浏览器,跳转前的http请求失效的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kkgbn/article/details/52553561

最近的一个程序,有个是个跳转页面,跳转之前会执行一段http请求,告诉后台请求的信息。但是发现在iphone 6中,一开始可以收到发过来的消息,之后发觉每次访问这个页面都是直接跳转,而之前的那个http请求没有发出去

<!DOCTYPE html>
<html>
<head>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<script>
var ua;
var isAndroid;
var isIos;
var isMicroMessenger;
var openid;
var url; 
var czxt = "pc";
$(document).ready(function(){
	ua = navigator.userAgent,
	isAndroid = /android/ig.test(ua),
	isIos = /iphone|ipod|ipad/ig.test(ua),  
	isMicroMessenger = /MicroMessenger/ig.test(ua);
	 	
	openid = getQueryString("openid");
	url = "http://service.gaotianyue.com/downloadhits/";
	if(isIos){
		czxt = "ios";
	}
	if(isAndroid){
		czxt = "android";
	}
	if(!isMicroMessenger){
		tellyou(url, openid, czxt);
		goToDownLoad();
	}
 	if (isMicroMessenger) {
    	 if (isIos) {
        	 document.body.innerHTML = '<img style="width:100%" src="imgs/weixin_tiaozhuan960x640.jpg">';
     	} else if (isAndroid) {
       		 document.body.innerHTML = '<img style="width:100%" src="imgs/weixin_tiaozhuan960x640.jpg">';
     	}
 	}
});
function goToDownLoad(){
	if(isIos){
		location.href = 'http://XXXX';
	}else{
		location.href = 'http://XXXY';
	}
}
function getQueryString(name) {  
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");  
    var r = window.location.search.substr(1).match(reg);  
    if (r != null) return unescape(r[2]);  
    return null;  
};
function tellyou(url, openid,os){
    $.ajax({
        type:"GET",
        //dataType:"json",
        url:url+os,
        data:{
            openid: openid
        },
        success:function(data){
        	console.log(os+"tell sucess	"+"result="+url+data);
        },
        error:function(){
        	console.log(os+"tell failed	"+"result="+url+data);
        }
    })
};
</script>
</html>
用延迟跳转还是不行:

if(!isMicroMessenger){
tellyou(url, openid, czxt);
setTimeout(goToDownLoad(), 200);
}

最后在ajax 的返回结果里处理跳转才成功,

即判断在外部浏览器的时候使用

if(!isMicroMessenger){

tellyou(url, openid, czxt);
//setTimeout(goToDownLoad(), 200);
}

在ajax修改如下:

function tellyou(url, openid,os){
    $.ajax({
        type:"GET",
        //dataType:"json",
        url:url+os,
        data:{
            openid: openid
        },
        success:function(data){
        console.log(os+"tell sucess"+"result="+url+data);
        goToDownLoad();
        },
        error:function(){
        console.log(os+"tell failed"+"result="+url+data);
        goToDownLoad();
        }
    })
};

之前测试的是这种情况都不行

自己为了保险起见:

function tellyou(url, openid,os){
    $.ajax({
        type:"GET",
        //dataType:"json",
        url:url+os,
        data:{
            openid: openid
        },
        success:function(data){
         console.log(os+"tell sucess"+"result="+url+data);
       if(os="ios"||os=="android"){
    goToDownLoad();
    }
        },
        error:function(){
        console.log(os+"tell failed"+"result="+url+data);
         if(os="ios"||os=="android"){
      goToDownLoad();
    }
        }
    })
};

当然后台要返回“ios"或者“android”,问题终于解决

展开阅读全文

没有更多推荐了,返回首页