昨天接到用户通知说在点击“看场地”时无法获取地理位置信息。

在接到通知时,首先想到的是排查机型问题。由于客户多为IOS用户,所以最先看的是在安卓是有没有此问题的发生,调查结果为安卓没有任何问题。再排查IOS的版本问题,结果发现无法获取地理位置的为IOS10版本,而IOS9上同样无此现象的产生。

所以基本定位到是IOS 10版本可能对我们现在的代码没法兼容,没办法小胳膊弄不过大腿,所以我们再定位现在的代码是通过什么样的方式去获取地理位置的。

结果如下:

基本可以确定IOS 10可能对H5获取地理位置的API做了限制或者有了修改,具体什么修改还需要继续排查。

在网上google了一下,原来这个问题在IOS10推出就已存在,现在已经到了10.3+了我们才暴露出来,蜜汁尴尬。。

具体的原因也说的比较明白:

  在IOS 10中,苹果对webkit定位权限进行了修改,所有定位请求的页面必须是https协议的。如果是非https网页,在http协议下通过html5原生定位接口会返回错误,
也就是无法正常定位到用户的具体位置,而已经支持https的网站则不会受影响。

基本网上有两种解决方案:

1、将网站的http设置为Https。

2、通过第三方解决,即通过调用百度地图或者腾讯地图来获取地理位置

文章链接地址 http://blog.csdn.net/for12/article/details/52803787

作者也是在使用第三方解决,但是我在使用百度API去获取地理位置的时候发现和真实的经纬度又有所偏差,原来百度地图对地理位置又进行了二次加密,又是一个坑,果断放弃。

而第一个方案,升级网站为https是个长期规划的过程(鬼才知道有多少个坑在里面),所以就需要找一个比较能短时间解决问题的方案。

最后终于在犄角旮旯找到了基本的解决方案:采用iframe可以绕过IOS的这一限制(但是没法绕过谷歌浏览器的限制)


var options = {
enableHighAccuracy: true,
maximumAge: 30000,
timeout: 12000
} window.locationCallback = function(err, position){
if (err) {
showError(err);
return ;
} showPosition(position);
} var str = '<iframe src="javascript:(function(){ '
+'window.navigator.geolocation.getCurrentPosition('
+'function(position){parent && parent.locationCallback && parent.locationCallback(null,position);}, '
+'function(err){parent && parent.locationCallback && parent.locationCallback(err);}, '
+'{enableHighAccuracy : '+ options.enableHighAccuracy +', maximumAge : '+ options.maximumAge +', timeout :'+ options.timeout +'})'
+';})()" style="display:none;"></iframe>';
$(str).appendTo('body') window.showPosition = function(position) {
// TODO
}
window.showError = function(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
alert('用户不允许地理定位!');
break;
case error.POSITION_UNAVAILABLE:
alert('无法获取当前位置!');
break;
case error.TIMEOUT:
alert('操作超时!');
break;
case error.UNKNOWN_ERROR:
alert('未知错误!');
break;
}
}

不得不说谷歌和苹果真有着挺进新标准的勇气和果断,或许这才是互联网领头羊的气势吧。

最新文章

  1. 使用Nexus搭建Maven本地仓库
  2. AFNetWorking https请求 SSL认证 自制证书
  3. 夺命雷公狗-----React---14--移入移出事件
  4. android wireshark抓包和fiddler抓包
  5. android控件库(2)-仿Google Camera 的对焦效果
  6. mybatis0211 mybatis和spring整合
  7. 【原】Storm及特点
  8. javascript第二课练习
  9. POJ 2594 - Treasure Exploration
  10. RTP 记录 log 该机制
  11. 原生封装ajax
  12. 201521123031 《Java程序设计》第11周学习总结
  13. vue语法之拼接字符串
  14. java 的重写(覆盖) 和重载的区别
  15. DOM 扩展
  16. CentOS 7.X 系统安装及优化
  17. 洛谷 P2466 Sue的小球 解题报告
  18. ---转载---phython资料
  19. JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List&lt;T&gt;.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动
  20. easyDialog参数配置说明

热门文章

  1. 大数据学习记录之ssh绵密登录
  2. Redis中的master-slave&amp;sentinel
  3. sql-update语句多表级联更新
  4. Java基础—String类小结
  5. 635B. Bear and Compressing
  6. 《Python自然语言处理》第二章 学习笔记
  7. 你不得不知的逻辑或(||)与(&amp;&amp;)非(!)
  8. C++模板--实现容器适配器
  9. .Net MVC4笔记之Razor视图引擎的基础语法
  10. Devexpress 中对RedailMenu的使用