最近的一个程序,有个是个跳转页面,跳转之前会执行一段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”,问题终于解决