为了账号安全,请及时绑定邮箱和手机立即绑定

在没有 Google API 的情况下使用浏览器 GeoLocation?

在没有 Google API 的情况下使用浏览器 GeoLocation?

哈士奇WWW 2022-10-27 14:18:01
我需要从 Web 客户端获取用户的位置。由于某些国家/地区的 Google 限制(有关更多信息,请参阅Stackoverflow 上的此问题),以下代码将返回一个空对象(在浏览器控制台、chrome 、safari等中):navigator.geolocation所以,我不能在地理定位 APIgetCurrentLocation中使用其他方法, 我正在使用不同的方法来查找用户位置(IP 库),但它不能正常工作。还有其他方法可以找到用户位置坐标吗?更新(2020 年 7 月 12 日):由于误解,我已经更新了我的帖子。 有些人说它适用于HTTPS。于是我打开Chrome浏览器,搜索StackOverflow(这个网站是众所周知的HTTPS)现在在控制台上,没有任何 navigator.geolocation 的数据:
查看完整描述

4 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

API 的另一种选择可能是GeoJS API。它基于Maxmind 的 GeoLite 数据库。

注意:在上述API中,所有HTTP请求都会重定向到HTTPS.


查看完整回答
反对 回复 2022-10-27
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

您可以尝试使用地理定位 API 获取用户位置,并使用用户的 IP 地址进行回退,以防 API 在用户的环境中不起作用。


const success = (position) => {

  // use position

};


const fallback = () => {

  // try getting it via the user's IP

}


navigator.geolocation.getCurrentPosition(success, fallback);

当然,这完全取决于您需要多少精度。IP 地址本地化精度不高。


查看完整回答
反对 回复 2022-10-27
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

MDN 参考

此功能仅在安全上下文 ( HTTPS )、部分或所有支持的浏览器中可用。

我认为您正在尝试在不起作用的开发模式下使用此功能。但是有一种方法可以在开发模式下解决这个问题,那就是在你的开发模式下使用假 https。

更新(2020 年 7 月 12 日):

我在 Stackoverflow 控制台中的地理位置对象(检查元素)。

//img1.sycdn.imooc.com//635a22ce00014f2319170562.jpg

Geolocation 对象实际上是空的,您应该看到它的原型用户__proto__.

如果您在项目中使用 create-react-app,则应在.env文件中添加HTTPS=true 。它对我有用。


查看完整回答
反对 回复 2022-10-27
?
慕少森

TA贡献2019条经验 获得超9个赞

要在 Web 客户端上查找用户的地理位置,您可以使用HTML Geolocation APIGoogle Geolocation请参阅 stackoverflow 上的这个问题)。但是总是需要获得用户的许可才能在浏览器上知道他们的位置(浏览器位置权限)。如果用户不允许,Geolocation api 将不会提供任何结果。

尽管允许用户使用,但与移动设备(使用内置 GPS)不同,计算机上运行的 Web 浏览器所产生的某些地理位置不会精确或什至不接近(没有内置 GPS)。如果用户使用 VPN 或代理,找到精确的地理位置也将是麻烦的。

所以总结一下,我们无法得到;

  1. 每个用户的地理位置未经他们的许可

  2. 100% 准确度,无需在其 Web 访问设备上使用本机 GPS,并且在使用 vpn 时,代理正在使用中。


查看完整回答
反对 回复 2022-10-27
  • 4 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信