navigator.getCurrentPosition() not working in Firefox nor Safari

我是研究僧i 提交于 2019-12-11 14:53:30

问题


I can't seem to get navigator.getLocation() working on either Firefox 65 or 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.";
}
}

Although Firefox ask to access location while Safari doesn't, neither of them return latitude nor longitude. Firefox and Safari log:

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

what am I doing wrong?

Yes I gave permissions, and yes I have location services enabled in both. The code works fine in Opera, Chrome, IE and Edge...

The curious thing is that I canNOT get my location with those browser even with 3rd party pages:

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

UPDATE#1 I have tried Steven's suggestion to add navigator.permission;This is the snipplet I ve run just to test if it worked in 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);
}
});
}

The console says "prompt" but getCurrentPosition() is not executed.


回答1:


Ok I found what was the problem and it was OSX and iOS. Firefox and Safari when running under those browsers needs location services habilitated from Finder->apple->System Preferences->Security & Privacy-> Privacy then add Firefox and Safari to the whitelist

For some reason, Chrome is setting itself into the whitelist after you accepted to share location on browser. The same for Opera.

Hence in a nutshell, the problem was Apple's privacy system which is a bit convoluted. Goods and bads I suppose



来源:https://stackoverflow.com/questions/55029867/navigator-getcurrentposition-not-working-in-firefox-nor-safari

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!