36

这段代码:

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 上(android 4.1,GPS 关闭,通过移动网络定位并启用 wifi),通过 WiFi 连接到互联网。

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

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

4

7 回答 7

20

你可以试试这个。它似乎可以在我的设备上运行(三星 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因为等式将首先执行然后显示。

希望这可以说清楚。

于 2013-07-03T07:09:13.280 回答
8

有一个解决方法:调用 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();
}

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

于 2014-06-22T05:33:31.270 回答
6

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

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

有趣的是,Firefox for Android 仅在 GPS 上运行没有任何问题。只有普通的 Android 浏览器(Chrome + Mobile Safari)会因 GPS-only 位置设置而失败

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

于 2014-02-19T22:00:06.480 回答
3

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

希望能帮助到你!

于 2018-03-25T02:40:55.587 回答
2

经过数小时寻求错误3的解决方案后,我只能重新启动手机,并且地理定位开始正常工作。太糟了...

于 2016-05-11T13:12:37.300 回答
2

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

对我有用的是

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

手段而不是三个参数我只使用了两种手段

{启用高精度:假,超时:5000}

于 2019-08-23T14:51:19.883 回答
-6

只需添加

“地理位置”,
“位置”

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

于 2014-11-01T02:55:02.943 回答