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)的 Lumia 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 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章