Cordova地理位置插件getCurrentPosition已被弃用

3

我有一个Ionic应用程序,正如文档中所示,尝试使用地理位置。

var posOptions = {timeout: 10000, enableHighAccuracy: true};

$cordovaGeolocation.getCurrentPosition(posOptions)
  .then(function (position) {
    //  do something
  }, function(err) {
    console.log(err);
    // error
  });

但现在它已经停止工作,在控制台中给了我这个警告。

getCurrentPosition()和watchPosition()在不安全的起源上已被弃用,并且将来会取消支持。您应该考虑将应用程序切换到安全起源,例如HTTPS。有关更多详细信息,请参见https://goo.gl/rStTGz

这似乎是w3c规范的巨大变化,我很惊讶没有太多相关文档。有人能告诉我我错过了什么吗?

该应用正在手机上运行,因此自然会侦听localhost。它通过http而不是https与服务器通信,但我不明白为什么这会影响获取地理坐标

我正在浏览器上测试应用程序以及在ios设备上作为cordova应用程序。


1
你在浏览器上进行测试吗?地理位置将在非 HTTPS 网站上被 Google Chrome 废弃,但这不会影响 Cordova 应用程序。 - jcesarmobile
是的,我在浏览器和 iOS 应用上进行了测试。 - Ridan
在您的 Cordova 应用程序中,HTML 文件是本地安装的还是显示远程网站?该网站使用 HTTP 还是 HTTPS? - Tom
本地安装。我认为ionic构建默认使用http。但是它是本地的,所以不应该有影响,对吗? - Ridan
2个回答

2

在Chrome浏览器中测试您的应用程序时,只需将应用程序的URL(通常为192.xxx.xxx.xxx:3000)更改为localhost:3000。

您需要确保您的媒体策略支持它,但是您不会收到安全错误。


2
我直接使用HTML5 geolocation。但cordova插件只是angular包装器,正如他们在这个Stack Overflow答案中所说的那样。
显然,浏览器不再能从http页面中使用地理位置信息。但对于ionic来说,这仅是livereload的问题。这里有一些描述使用http-proxy解决方案的方法,以使livereload在https上工作。
在没有livereload的设备上运行应用程序(即在末尾没有“-l”的'ionic run android')可以正常工作。
记得在deviceready事件后运行getCurrentPosition。对我而言,这个控制器中的方法可以正常工作:
            document.addEventListener("deviceready", function () {
            console.info('deviceready fired!');
            window.navigator.geolocation.getCurrentPosition(function(position) {
                console.info('Location from Cordova:');
                console.info("Latitude: " + position.coords.latitude + "; Longitude: " + position.coords.longitude);
            });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接