Google 地图:如果用户拒绝地理定位,则调用另一个使用 Public IP 的方法

Google Maps: If User Denies Geolocation, Then Call Another Method That Uses Public IP

我有一个简单的问题,我似乎无法回避。我正在使用 Google 地图 javascript 来显示特定位置,这在用户接受地理定位服务时一切正常。要测试 Google 地图,请考虑 Ip 是否正常工作,允许 google 地图使用 public IP 地址也可以正常工作。但是,当我尝试执行以下操作时,甚至没有调用 showLocationBasedOnIP() 方法。

function initMap(){
   if (navigator.geolocation) {
     navigator.geolocation.getCurrentPosition(showPosition);
   }
   else{
     showLocationsBasedOnIP();
   }
}

我已经通过删除地理位置检查器独立测试了 showLocationsBasedOnIP,但是当我尝试如上所示集成它时,甚至没有触发该方法。

我想要实现的是,当用户拒绝地理定位时,应该触发我的 showLocationsBasedOnIP() 方法,其中我在浏览器上显示一条消息,表明正在使用 public IP 地址,并且除非用户打开地理定位,否则定位服务将不准确。

有什么遗漏吗?

您需要将 showLocationsBasedOnIP 函数设置为 getCurrentPosition() 的错误回调函数。像这样:

<!DOCTYPE html>
<html>

  <body>
    <button onclick="getLocation()">Try It</button>
    <script>
      function getLocation() {
        if (navigator.geolocation) {
          navigator.geolocation.getCurrentPosition(showPosition, showLocationsBasedOnIP);
        } else {
          showLocationsBasedOnIP();
        }
      }

      function showPosition(position) {
        console.log("showing position: ", position.coords.latitude, position.coords.longitude);
      }

      function showLocationsBasedOnIP() {
        console.log("showing location based on IP");
      }

    </script>
  </body>

</html>

现在您的函数将在两种情况下执行;当用户不允许位置权限以及当用户的浏览器不支持地理定位时。