腾讯网网站内容定位(一下下的http网页禁止了geolocationapi的调用,原因是什么?)
优采云 发布时间: 2021-08-31 02:00腾讯网网站内容定位(一下下的http网页禁止了geolocationapi的调用,原因是什么?)
iOS10下的http网页禁止geolocation api的调用。原因是出于安全考虑,这个时候只要升级到https协议,就可以正常使用geolocation api了。这是最推荐的方案,因为从大势来看,很多浏览器厂商已经开始禁止在http下调用geolocation。因此,为避免一劳永逸的问题,建议将整个站点切换为https。
但是我们的一些应用不能立即切换到https,仍然需要兼容http的使用。这个时候我们该怎么办?
兼容方案:借助地图厂商api
目前我们可以使用各大地图厂商(如腾讯地图、百度地图、谷歌地图)提供的API来帮助我们解决这个问题。
让我们仔细看看如何调用每个地图的位置服务:
腾讯地图
介绍腾讯地图前端定位组件
调用api
var geolocation = new qq.maps.Geolocation("OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77", "myapp");
geolocation.getLocation(showPosition, showErr);
function showPosition(result) {
console.log('您的位置:'+ result.lng + ',' + result.lat );
};
function showErr(err) {
console.log(err)
};
百度地图
引入百度地图(百度地图不像腾讯地图那样有单独的定位组件,所以需要引入整个地图的js-sdk)
调用api
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(result){
if(this.getStatus() == window.BMAP_STATUS_SUCCESS){
console.log('您的位置:' + result.point.lng + ',' + result.point.lat );
} else {
console.log('failed:'+this.getStatus());
}
},{enableHighAccuracy: true})
高地德国地图
介绍高德地图(还要进入整个js-sdk,因为高德是用插件的形式来调用定位函数,所以需要提前把地图DOM加载到页面中)
调用api
var map, geolocation;
//加载地图,调用浏览器定位服务
map = new AMap.Map('container', {
resizeEnable: true
});
map.plugin('AMap.Geolocation', function() {
geolocation = new AMap.Geolocation();
geolocation.getCurrentPosition();
AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息
AMap.event.addListener(geolocation, 'error', onError); //返回定位出错信息
});
//解析定位结果
function onComplete(data) {
console.log('您的位置:' + result.position.lng + ',' + result.position.lat );
}
//解析定位错误信息
function onError(error) {
console.log(error)
}
四种定位方式返回数据的差异
整合计划
通过上面的介绍,我们发现各大地图的调用方式和返回格式是不同的。针对这个问题,我写了一个工具geo-for-http,提供腾讯地图、百度地图、高德地图的位置。该服务替代了原生HTML5的无效定位功能,帮助您在iOS10下使用http进行正常定位。
总体设计思路是:
三统一:统一注册方式、统一调用方式、统一数据返回格式。
具体用法请点击下方链接,欢迎评论~
门户:zyf394/geo-for-http