navigator.geolocation.getCurrentPosition 在 android google chrome 上不起作用

Posted

技术标签:

【中文标题】navigator.geolocation.getCurrentPosition 在 android google chrome 上不起作用【英文标题】:navigator.geolocation.getCurrentPosition doesn't work on android google chrome 【发布时间】:2013-06-25 06:15:32 【问题描述】:

这段代码:

navigator.geolocation.getCurrentPosition(
                    function(position) 
                        alert(position.coords.latitude, position.coords.longitude);
                    ,
                    function(error)
                        alert(error.message);
                    , 
                        enableHighAccuracy: true
                        ,timeout : 5000
                    
            );

https://jsfiddle.net/FcRpM/ 在我的笔记本电脑上的 Google Chrome 中工作,但在移动 HTC one S 上(安卓 4.1,GPS 关闭,通过移动网络定位并启用 wifi),通过 WiFi 连接到互联网。

    默认浏览器工作正常。 适用于 android 的 Google Chrome、Opera、Yandex.browser 失败并显示“超时已过期”。

其他 android 应用程序正确定位我。

【问题讨论】:

在我的 HTC one S 上也有同样的问题。我看到这里有报道:code.google.com/p/chromium/issues/detail?id=175909 【参考方案1】:

你可以试试这个。它似乎可以在我的设备上运行(三星 Galaxy Nexus 在 Wi-Fi 上运行 Chrome 27.0.1453.90(无数据连接,无 GPS))

navigator.geolocation.getCurrentPosition(
    function(position) 
         alert("Lat: " + position.coords.latitude + "\nLon: " + position.coords.longitude);
    ,
    function(error)
         alert(error.message);
    , 
         enableHighAccuracy: true
              ,timeout : 5000
    
);

问题是警报只接受字符串(以其原始形式),但是您传递了 2 个双打。例如将警告框修改为alert('Hey', 'Hello');,输出将仅为Hey。将, 更改为+,您将获得串联的字符串HeyHello。您不能在 alert 内使用 + 符号,因为等式将首先执行然后显示。

希望这能说明问题。

【讨论】:

问题不在警报中('Hey', 'Hello');我看到一行,代码中的问题不返回位置。您的代码显示“超时已过期”警报 HTC One S Chrome Chrome 27.0.1453.90 这听起来很疯狂,但您的设备上的定位服务是否已打开?我刚刚再次尝试了相同的代码,但没有打开谷歌位置访问,我得到了你提到的错误。在 Chrome 中,转到设置 -> 内容设置 -> Google 位置设置,然后查看您的浏览器设置是什么 是的,定位服务已开启,代码在默认浏览器中有效,但在 Chrome 中无效 除非您将 Chrome 设置为不使用您的位置,否则我似乎找不到任何其他好的解释为什么上述代码可能不起作用。我已经在 Chrome 和本机浏览器上的设备上进行了测试,并且运行良好。对不起,如果我不能提供更多帮助。 似乎启用高精度为我解决了这个问题。请注意,如果没有将此选项设置为 true,它根本不会击中 GPS。【参考方案2】:

有一种解决方法:调用 watchPosition,并在清除 watchID 之前等待 5 秒。代码如下;

var options =  enableHighAccuracy: true, maximumAge: 100, timeout: 60000 ;
if( navigator.geolocation) 
   var watchID = navigator.geolocation.watchPosition( gotPos, gotErr, options );
   var timeout = setTimeout( function()  navigator.geolocation.clearWatch( watchID ); , 5000 );
 else 
   gotErr();

目前我还没有玩过“选项”值或超时延迟,但上面的代码在我尝试过的每个平台上都带回了准确的定位信息。

【讨论】:

您确定该解决方法有效吗?我刚试了,不行 是的,它应该可以工作,检查您的浏览器是否允许来自正在加载脚本的主机的位置请求。之前我的域发生在浏览器的黑名单中,所以位置没有共享给网站。【参考方案3】:

刚刚完成对一组移动设备和 javascript 地理位置的测试。我使用了 Google 的示例代码,以确保问题不在我自己的代码中。

Android 4.4 版 Chrome 似乎无法与仅 GPS 定位服务一起使用,2.3 版浏览器也无法使用。他们都需要“高精度”——使用无线和 3G/4G 网络。

有趣的是,Android 版 Firefox 仅在 GPS 上运行没有任何问题。 只有普通的 Android 浏览器(Chrome + Mobile Safari)无法使用仅 GPS 的位置设置

还有其他成员 - 带有 GPS、Windows 和 Linux(均带有 ADSL)的 L​​umia WP8 可以完美配合任何位置设置。

【讨论】:

我已经提交了一个针对铬的错误:bugs.chromium.org/p/chromium/issues/detail?id=620003。还没有回应。【参考方案4】:

好吧,我昨天遇到了这个问题,问题是 Geolocation API 只能通过 HTTPS 使用。它可以在http://localhost 上运行,但对于其他设备,您需要建立安全连接。

希望对你有帮助!

【讨论】:

【参考方案5】:

在为 error3 寻找解决方案数小时后,我只能重新启动手机,并且地理定位开始正常工作。太惨了……

【讨论】:

【参考方案6】:

它适用于每个模拟器,但不适用于安卓设备

对我有用的是

navigator.geolocation.getCurrentPosition(
                (position) => 
                    console.log(position);
                ,
                (error) => console.log(new Date(), error),
                 enableHighAccuracy: false, timeout: 5000,
            );

意思不是三个参数我只使用了两个意思

enableHighAccuracy: false, timeout: 5000

【讨论】:

【参考方案7】:

添加

“地理位置”, “位置”

在权限下。为我工作。 :-)

【讨论】:

不是原生应用,是Javascript 我使用来自 Adrian (Javascript) 的代码来检查问题所在,并显示“应用程序没有足够的地理定位权限”。所以答案可能是对的。

以上是关于navigator.geolocation.getCurrentPosition 在 android google chrome 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章