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

场景:

图文统计:要统计一篇图文推送到手机端的阅读量,我是在这个页面加上了一个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>


猜你喜欢

转载自blog.csdn.net/cocijava/article/details/53764074