现在,谷歌地图可以借助Firefox在街道精确度上精确定位我的位置.
我知道这是HTML 5兼容浏览器的一个新功能,并且通过使用连接的WiFi网络的某种功能来获取位置(我希望我没有做出任何愚蠢的假设).
我打算知道整个过程是如何工作的:
提前致谢!
我需要从 Web 客户端获取用户的位置。由于在一些国家(详细信息,请参阅谷歌限制#2这个问题),下面的代码会返回一个空的对象(在浏览器控制台,铬,Safari浏览器,等等。):
navigator.geolocation
Run Code Online (Sandbox Code Playgroud)
所以,我不能getCurrentLocation在地理定位 API 中使用和其他方法
我使用不同的方法来查找用户位置(IP 基础),但它不能正常工作。
还有另一种方法可以找到用户位置坐标吗?
更新(2020 年 7 月 12 日):
由于误解,我更新了我的帖子。 有些人说它适用于 HTTPS。于是我打开Chrome浏览器,搜索StackOverflow(这个站点是众所周知的HTTPS)
现在在控制台上,没有 navigator.geolocation 的任何数据:
我有一个Chrome扩展程序,它使用W3C Geolocation API来获取用户的位置.该扩展程序主要用于Chromebook.
我注意到API似乎在大多数情况下返回相同的坐标(缓存?),即使我将maximumAge参数设置为0.我通过在位置#1的Chromebook上部署扩展来测试这一点,然后采用设备到位置#2,距离约1公里.在那里再次调用API并返回与之前相同的坐标.过了一会儿(我间隔10分钟),它返回了正确的坐标,但是当我回到位置#1时,我又从位置#2获得了缓存坐标.
我尝试过getCurrentPosition,watchPosition以及选项对象的几种组合,但似乎总是产生相同的结果.
我目前的代码如下:
function getGeolocation() {
return new Promise((resolve, reject) => {
const options = { enableHighAccuracy: true, timeout: 30000, maximumAge: 0 };
navigator.geolocation.getCurrentPosition(resolve, reject, options);
});
}
getGeolocation()
.then(position => handler(position))
.catch(err => console.error(err));
Run Code Online (Sandbox Code Playgroud)
我需要这个在第一次尝试时或在合理的短时间内返回正确的坐标.有什么建议?
谢谢!
编辑:
要注意的是,浏览器传感器选项卡中的坐标更改每次都能正常工作,但在实际情况下,它似乎在大多数情况下都会返回缓存结果.
编辑(11月5日):
经过一些更多测试后,似乎只在Chrome OS上发生这种情况.我们无法在PC上重现相同的行为(有或没有扩展名).
geolocation ×2
browser ×1
firefox ×1
google-api ×1
google-maps ×1
html5 ×1
javascript ×1
location ×1
wifi ×1