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

时间:2020-07-02 06:46:49

标签: javascript browser google-api geolocation location

我需要从Web客户端获取用户的位置。 由于Google在某些国家/地区受到限制(有关更多信息,请参见this question on Stackoverflow),因此以下代码将返回一个空对象(在浏览器控制台中, chrome,safari etc 。):

navigator.geolocation

因此,我无法在地理位置API 中使用getCurrentLocation和其他方法 我正在使用不同的方法来查找用户位置(基于IP),但是效果不佳。

还有另一种方法来查找用户位置坐标吗?

已更新(2020年7月12日):

由于误解,我已经更新了我的帖子。 有些人说它在HTTPS上有效。 所以我打开了Chrome浏览器并搜索StackOverflow(此网站是著名的HTTPS)

enter image description here

现在在控制台上,没有任何有关navigator.geolocation的数据:

enter image description here

4 个答案:

答案 0 :(得分:4)

MDN reference

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

我认为您正在尝试在无法使用的开发模式下使用此功能。 但是有一种方法可以在开发模式下解决此问题,那就是在您的开发模式下使用伪造的https。

已更新(2020年7月12日):

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

地理位置对象实际上是空的,您应该看到其原型用户__proto__

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

答案 1 :(得分:1)

要在Web客户端上查找用户的地理位置,可以使用 HTML地理位置API Google地理位置refer this question on stackoverflow)。但是,始终需要在上允许用户知道其位置(浏览器位置权限),以在浏览器上获得用户的许可。如果用户不允许,Geolocation api将不会提供任何结果。

虽然允许用户使用,但某些与计算机上运行的Web设备不同的是,这些地理位置是由运行在计算机上的网络浏览器导致的,这些地理位置不精确甚至不紧密(没有内置GPS)。如果用户使用VPN或代理,那么找到精确的地理位置也是很麻烦的。

因此,作为摘要,我们将无法获得;

  1. 每个用户未经其许可的地理位置
  2. 在其网络访问设备上没有本地GPS且使用vpn时使用代理的情况下,准确率为100%。

答案 2 :(得分:1)

API的替代选择可以是GeoJS API。它基于Maxmind's GeoLite数据库。

通知:在上述 API 中,所有HTTP请求都将重定向到HTTPS

答案 3 :(得分:-1)

您可以尝试使用geolocation API获取用户位置,并在不使用API​​的情况下使用该用户的IP地址进行备用。

  try{
    var triggers = ScriptApp.getProjectTriggers();
    for (var i = 0; i < triggers.length; i++) {
      ScriptApp.deleteTrigger(triggers[i]);
    }

    ScriptApp.newTrigger('trigger_submissions_check')
    .timeBased()
    .onWeekDay(ScriptApp.WeekDay.SUNDAY)
    .atHour(0)
    .create();
    Browser.msgBox("Successfully created a trigger");
  } catch(e) {
    MailApp.sendEmail("xxx@yyy.zzz","Classroom Project EXCEPTION in Trigger", e.message);
  }

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