所有Android浏览器中的JavaScript Geolocation都失败了 - 在iOS和PC上工作

The*_*ter 7 javascript android geolocation

这是我的基本代码:

if (navigator.geolocation) {

     // WILL GET TO THIS POINT WITH TEST `ALERT()`  

      navigator.geolocation.getCurrentPosition(

     // WILL NOT GET OT THIS POINT IN ANDROID BROWSER

     function(position) {
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;
      }, showError, {
        enableHighAccuracy: true,
        timeout : 5000,
        maximumAge: 0
       }
       );
    } else {
        return alert('No Geolocation Support.');
    }
};
Run Code Online (Sandbox Code Playgroud)

它在iOS(Safari和Chrome)中运行良好; 以及我尝试过的所有PC浏览器.

在Android上,我尝试过HTC Browser,Chrome和Dolphin.卫星看起来像正在搜索,它停止.我甚至不记得它要求我允许使用地理位置(可能忽略了那部分)

更新:它适用于我的Nexus 10 Chrome浏览器.但不是我的HTC One X.

更新2 - 这似乎只发生在一个Android设备,AT&T HTC One X.所有其他Android设备,PC浏览器和iOS工作正常.在One XI上获取错误代码:超时.此外,GPS在此设备上工作正常.

Dre*_*wes 7

您必须使用HTTPS

从Chrome 50开始,Chrome不再支持使用来自非安全连接提供的网页的HTML5 Geolocation API来获取用户的位置.这意味着必须从安全上下文(如HTTPS)提供进行Geolocation API调用的页面.

https://developers.google.com/web/updates/2016/04/geolocation-on-secure-contexts-only?hl=en


Exc*_*ion 6

你的代码绝对正确.I have tested this in Android 2.3 + to latest version in different devices including HTC, Samsung, Asus tablets and Samsung tablets.即使在平板电脑中,它也能正常工作.检查设备是否具有设备中的设置share location false.当页面脚本请求位置时,浏览器将在android设备浏览器中询问用户权限.可能是你点击过,从不分享你的位置.请通过清除设备中的浏览器设置进行检查.我保证android 2.3+中没有geolocation api问题而不会搞乱安全设置.

如果问题仍然存在,并且您想要添加至少一些polyfill,请检查此https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills并祝您好运.他们根据您的IP usig计算位置geoIP database.