1

ジオロケーションが無効になっている場合、マップは指定された場所の中心にあるはずですが、無効にすると何も読み込まれないという問題があります。ifジオロケーションが有効になっている場合、ステートメントの最初の部分は正常に機能します。else無効にすると、パーツが機能しないのはなぜですか?

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(function (position) { 
    var latitude = position.coords.latitude;                    
    var longitude = position.coords.longitude;               
    var coords = new google.maps.LatLng(latitude, longitude);
    var directionsService = new google.maps.DirectionsService();
    var directionsDisplay = new google.maps.DirectionsRenderer();
    var mapOptions = 
    {
      zoom: 15,  
      center: coords, 
      mapTypeControl: true, 
      navigationControlOptions:
      {
        style: google.maps.NavigationControlStyle.SMALL 
      },
      mapTypeId: google.maps.MapTypeId.ROADMAP 
    };
    map = new google.maps.Map(document.getElementById("mapContainer"), mapOptions);
    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById(''));
    var request = {
      origin: coords,
      destination: 'BT42 1FL',
      travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
    directionsService.route(request, function (response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        directionsDisplay.setDirections(response);
      }
    });
  });
}
else {
  alert("Geolocation API is not supported in your browser.");
  var mapOptions =
  {
    zoom: 15,  
    center: 'BT42 1FL',
    mapTypeControl: true, 
    navigationControlOptions:
    {
      style: google.maps.NavigationControlStyle.SMALL 
    },
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById("mapContainer"), mapOptions);
}

alertも警告しません。

4

1 に答える 1

1

少なくともnavigator.geolocationChrome24では、ユーザーがジオロケーションを拒否した場合、それは偽物ではありません。

ユーザーがジオロケーションを拒否すると、失敗コールバック(の2番目の引数getCurrentPosition)が呼び出されます。もちろん、これは他の場所の取得に失敗した場合にも発生します。次のコード(jsfiddleで利用可能)を試してみてください。

function success() {
    alert("success!");
}

function failure() {
    alert("failure!");
}

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(success, failure);
    alert("truthy!");
} else {
  alert("falsy!");
}

私のブラウザでは、「拒否」ボタンをクリックすると、これは「真実」に続いて「失敗」を警告します。ジオロケーションが失敗したかユーザーが拒否したかに関係なく同じ動作をしたい場合は、次のようなコードをお勧めします。

function noGeoInfo() {
    alert("couldn't get your location info; making my best guess!");
}

function geoInfo(position) {
    alert("hey your position is " + position + " isn't that swell?");
}

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(geoInfo, noGeoInfo);
} else {
    noGeoInfo();
}
于 2013-02-11T02:38:26.753 に答える