您的位置:首页 > 理论基础 > 计算机网络

前端webview,页面加载,发送Ajax请求,请求失败,https,http

2016-12-20 16:04 1671 查看
场景:

图文统计:要统计一篇图文推送到手机端的阅读量,我是在这个页面加上了一个Ajax请求,当页面加载的时候发送请求到后端,来统计阅读量,返回数量。

页面链接是经过Apach映射的。

在生产环境一直统计不到,Ajax请求没有发出来,后来发现是由于该页面是Https的,而其中发送的Ajax请求servlet的url是http的。

在火狐调试报错:"已阻止载入混合活动内容"

原理:

当一个HTTPS页面中包含HTTP内容时,即使主页面是经过SSL加密受HTTPS协议保护,但其中的HTTP内容可以被攻击者阅读或更改;这种HTTPS页面包含HTTP内容的情况,就被称为“混合内容”。
这种内容是不安全的,如果主页面是HTTPS,但iframe src引用HTTP内容,Firefox23默认会阻止这种内容的显式!

ps:但是安卓机有一台华为却能统计到的,其他安卓机统计不到,后来百度发现这台安卓机是Android4.4.4,而从Android5.0开始,WebView默认不支持同时加载Https和Http混合模式。所以这台安卓机可以统计到图文阅读量。

解决方式:
我把Ajax要请求servlet的url也改成了https的,就可以在手机端打开后成功发送ajax了,并能获取到返回的数据。
由于我的事一个简单页面,所以没用jquery,而是用的简单的原生ajax请求,轻量。

<script>
window.onload = function(){
var messageIdElement = document.getElementById('file_messageId');
var messageId = messageIdElement.value;
var user_agent = navigator.userAgent;
var i = user_agent.indexOf('YSTUSERCODE');
var userCode = '';
if(i != -1){
userCode = user_agent.substring(i,user_agent.length);
}
var xmlHttp;
if(window.ActiveXObject){
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
}else if(window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
var url = 'msgTwTJurl?id='messageId'&userCode='userCode ;
alert('url='url);
xmlHttp.open('get',url,true);
xmlHttp.send();
xmlHttp.onreadystatechange=function(){
if(this.readyState == 4){
if(this.status >=200 && this.status <400){
var readCount= this.responseText;
var span = document.getElementById('readCount');
span.innerHTML=readCount;
}
}
}
};
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: