我有一个离子应用程序正在尝试完全按照文档中所示使用地理位置。
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应用程序。
答案 0 :(得分:2)
在Chrome浏览器中测试您的应用时,只需将应用网址(通常为192.xxx.xxx.xxx:3000)更改为localhost:3000
您需要确保您的媒体政策支持它,但不会出现安全错误。
答案 1 :(得分:1)
我直接使用HTML5地理位置。但是,cordova插件只是它的角度包装,正如他们所说in this Stack Overflow answer。
显然浏览器无法再使用http页面中的地理位置。但对于离子来说,这只是对于livereload的问题。 There是使用http-proxy描述的一些解决方法,可以在https上使用livereload。
在没有livereload的情况下在设备上运行应用程序(例如,离线运行android'没有' -l'在最后)工作正常。
请记住在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);
});