【发布时间】: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