【问题标题】:navigator.getCurrentPosition() not working in Firefox nor Safarinavigator.getCurrentPosition() 在 Firefox 和 Safari 中不起作用
【发布时间】:2019-03-06 18:25:41
【问题描述】:

我似乎无法让 navigator.getLocation() 在 Firefox 65 或 Safari 10 上运行

function getLocation(user_radius) {

var geo_options = {
enableHighAccuracy: true, 
maximumAge        : 30000, 
timeout           : 27000
};

function error(err) {
console.warn('Cannot load user location. Make sure you gave permission to share location');
}

document.body.style.position = "absolute";

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function (position) {

        lat0 = position.coords.latitude;
        long0 = position.coords.longitude;
        corefunction(user_radius);
    },error,geo_options);
} else {
    x.innerHTML = "Geolocation is not supported by this browser.";
}
}

虽然 Firefox 要求访问位置,而 Safari 没有,但它们都不会返回纬度或经度。 Firefox 和 Safari 日志:

*Cannot load user location. Make sure you gave.....*

我做错了什么?

是的,我授予了权限,是的,我在两者中都启用了定位服务。 该代码在 Opera、Chrome、IE 和 Edge 中运行良好...

奇怪的是,即使使用 3rd 方页面,我也无法通过这些浏览器获取我的位置:

https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_geolocation https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API

更新#1 我已经尝试了 Steven 的添加 navigator.permission 的建议;这是我运行的代码片段,只是为了测试它是否在 Firefox 中有效。

   function handlePermission() {
  navigator.permissions.query({name:'geolocation'}).then(function(result) {
  if (result.state == 'granted') {
  report(result.state);
  geoBtn.style.display = 'none';
} else if (result.state == 'prompt') {
  report(result.state);
  geoBtn.style.display = 'none';
  navigator.geolocation.getCurrentPosition(function (position) {

        lat0 = position.coords.latitude;
        long0 = position.coords.longitude;

    },error,geo_options);
} else if (result.state == 'denied') {
  report(result.state);
  geoBtn.style.display = 'inline';
}
result.onchange = function() {
  report(result.state);
}
});
}

控制台显示“提示”,但 getCurrentPosition() 未执行。

【问题讨论】:

  • 您还需要实现权限 API。该错误是由于用户不允许地理定位权限。见:developer.mozilla.org/en-US/docs/Web/API/Permissions_API/…
  • 谢谢史蒂夫,我已经从您链接的页面中添加了 navigator.permission.query(...)。日志显示“提示”作为状态,但没有返回任何内容,看起来 getCurrentPosition() 没有执行...
  • 你能更新你的代码示例吗?您是否使用类似于此页面的代码:developer.mozilla.org/en-US/docs/Web/API/PermissionStatus
  • 添加到主帖 UPDATE#1
  • 我不是 FireFox 权限 API 方面的专家,但我可能可以提供更多帮助,但这只是目前的预感。根据我的经验,当用户在任何时候“拒绝”给定域的权限时,他们不会被提示重新允许权限,而是需要导航到给定域的浏览器设置才能实际将其更改为“允许” ,连提示都不会显示。虽然我在 iOS 上使用移动 safari 体验过这种情况,但对我来说这听起来很相似,

标签: javascript browser location


【解决方案1】:

好的,我发现了问题所在,是 OSX 和 iOS。 Firefox 和 Safari 在这些浏览器下运行时需要从 Finder->apple->System Preferences->Security & Privacy-> Privacy 进行定位服务 然后将 Firefox 和 Safari 加入白名单

由于某种原因,在您接受在浏览器上共享位置后,Chrome 会将自己设置为白名单。 Opera 也是如此。

因此,简而言之,问题在于 Apple 的隐私系统有点复杂。我猜是好是坏

【讨论】:

  • 哦哇,真是个问题!我很高兴你能够解决这个问题,因为我希望我也会在这里遇到它。 ;)
  • 完美 - 您知道是否有任何方法可以通过编程方式检测是否是这种情况,以帮助用户解决问题?
  • 哇,这太有用了——这为我节省了数小时的调试时间。谢谢!!!
猜你喜欢
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2015-01-24
  • 2020-02-16
  • 1970-01-01
相关资源
最近更新 更多