【问题标题】:navigator.geolocation.getCurrentPosition doesn't work on android google chromenavigator.geolocation.getCurrentPosition 在 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 连接到互联网。

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

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

【问题讨论】:

标签: javascript android html google-chrome geolocation


【解决方案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 可以完美配合任何位置设置。

【讨论】:

【解决方案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) 的代码来检查问题所在,并显示“应用程序没有足够的地理定位权限”。所以答案可能是对的。
        猜你喜欢
        • 2018-11-14
        • 2017-03-08
        • 1970-01-01
        • 1970-01-01
        • 2012-03-02
        • 1970-01-01
        • 2018-06-20
        • 2019-04-12
        • 1970-01-01
        相关资源
        最近更新 更多