2013-02-11 63 views
1

如果地理位置被禁用,地圖應居中指定位置,但禁用時不會加載任何內容。啓用地理位置後,if語句的第一部分正常工作。爲什麼else零件在禁用時不工作?當地理位置被禁用時Google地圖不在位置上居中位置

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也不警告。

+0

檢查navigator.geolocation的值,它是否被正確設置? – QuentinUK 2013-02-11 02:31:39

+0

我該如何檢查? – Colin747 2013-02-11 02:33:37

+0

難道你沒有調試器嗎? – QuentinUK 2013-02-11 02:37:59

回答

1

至少在Chrome 24中,當地理位置被用戶拒絕時navigator.geolocation不是虛假的。

如果用戶拒絕地理位置,則會調用失敗回調(getCurrentPosition的第二個參數)。當然,對於任何其他未能獲得位置的情況也會發生這種情況。玩的以下代碼(a jsfiddle提供):

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

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

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

在我的瀏覽器,如果我點擊「拒絕」按鈕,這提醒「truthy」,其次是「失敗」。如果你想給同樣的行爲,無論地理定位失敗還是用戶拒絕它,我會建議如下代碼:

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(); 
} 
+0

那麼我怎麼才能實現語句的'else'部分呢? – Colin747 2013-02-11 02:42:36

+0

@ Colin747仔細檢查,看起來我一定弄錯了測試。它確實調用了失敗回調(第二個參數爲'getCurrentPosition'),所以我將它作爲一個函數實現,並將它作爲回調傳遞給getCurrentPosition,並從else分支中執行。編輯我的答案以匹配。 – 2013-02-11 02:49:24

+0

對不起,你能解釋爲什麼在jsfiddle,如果我禁用地理位置警報說'truthy'然後另一個警報說'失敗'? – Colin747 2013-02-11 03:02:12