谷歌地图服务GoogleMap Service 如何使用HTTP而不用HTTPS
@author Anderson Mao, 2013-03-28
使用Google Map V3, 可以用HTTP,也可以用HTTPS
http://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places&sensor=false
https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places&sensor=false
由于在大陆使用https会间歇性访问不了,所以可以用http访问。
但是,当使用Google Map Service的时候。比如
var placesService = newgoogle.maps.places.PlacesService(this.map);
placesService.textSearch(request,myCallback);
Google Map内部会生成一个GET request, 使用的是https。没有参数或者接口可以改成http。导致虽然加载时是用http,但是内部依然用https访问不了的情况。
解决方法:
查看Google 返回的JS, 是混淆代码,基本上找不到可以改URL的地方。
Debug这个GET request, 不是AJAX,发现是用JSONP访问。也没有调用document.write()。后来发现新增<script>是在<head>里面。拦截appendChild()。找到可以修改URL的地方。
上代码:
var heads = document.getElementsByTagName("head");
if(heads){
var head = heads[0];
if(head.appendChild && head._original_appendChild_ === undefined){
head._original_appendChild_ = head.appendChild;
head.appendChild = function(node){
if(node.nodeName == "SCRIPT" && node.src && node.src.indexOf("https://maps.googleapis.com/maps/api/js")==0){
node.src = node.src.replace(/^https:/, "http:");
}
return head._original_appendChild_(node);
}
}
}