2011-08-26 111 views
1

我正在Google Chrome(v13)中使用Geolocation API進行實驗。我已經制作了簡單的HTML頁面去交手的基本知識:Chrome中的地理位置API:Position的座標屬性undefined

<html> 
<head> 
    <script type="text/javascript"> 
     navigator.geolocation.getCurrentPosition(doStuff, error, setOptions); 

     function setOptions(geoLoc) { 
      geoLoc.enableHighAccuracy = true; 
      geoLoc.timeout = 30; 
      geoLoc.maximumAge = 0; 
     } 

     function doStuff(geoLoc) { 
      document.getElementById("refreshTimestamp").innerHTML = "Last refresh: " + Date.now(); 
      document.getElementById("latitude").innerHTML = "Latitude: " + geoLoc.coords.latitude; 
      document.getElementById("longitude").innerHTML = "Longitude: " + geoLoc.coords.longitude; 
      document.getElementById("altitude").innerHTML = "Altitude: " + geoLoc.coords.altitude; 
      document.getElementById("accuracy").innerHTML = "Accuracy: " + geoLoc.coords.accuracy; 
      document.getElementById("altitudeAccuracy").innerHTML = "Altitude Accuracy: " + geoLoc.coords.altitudeAccuracy; 
      document.getElementById("heading").innerHTML = "Heading: " + geoLoc.coords.heading; 
      document.getElementById("speed").innerHTML = "Speed: " + geoLoc.coords.speed; 
     } 

     function error(geoLoc) { 
      document.getElementById("error").innerHTML = "ERROR! Code: " + geoLoc.code + "; Message: " + geoLoc.message; 
     } 
    </script> 
</head> 
<body onload="doStuff()"> 
    <p id="refreshTimestamp"></p> 
    <p id="latitude"></p> 
    <p id="longitude"></p> 
    <p id="altitude"></p> 
    <p id="accuracy"></p> 
    <p id="altitudeAccuracy"></p> 
    <p id="heading"></p> 
    <p id="speed"></p> 
    <p id="error"></p> 
</body> 
</html> 

運行這個頁面,一切都顯得精細 - 如預期顯示緯度,經度和準確性。然而,在尋找開發人員工具控制檯,我提出了一個錯誤:

Uncaught TypeError: Cannot read property 'coords' of undefined (geo.html:14) 

調試它看起來像位置的對象是不確定的,在它的第一個電話 - 行處理緯度。然而,任何其他方面都沒有錯誤。事實上,郵政對象在緯度線之後就存在了。

事情我已經試圖阻止這種錯誤包括:

  1. 移動getCurrentPosition調用回調函數後聲明
  2. 分配geoLoc.coords到XY變量作爲doStuff的第一行( )函數(這樣做後,這是造成該錯誤的代碼的一部分)

我是否正確調用位置對象? Chrome的怪癖是?這與確定職位所花費的時間有關嗎?

謝謝, 克里斯。

+0

你從'文件上運行:// URL'?如果是這樣,請嘗試從'http://' –

回答

2

這是不確定的,因爲這樣:

<body onload="doStuff()"> 

也許你想是這樣的:

function init() { 
    navigator.geolocation.getCurrentPosition(doStuff, error, setOptions); 
} 
... 
<body onload="init()"> 
+0

謝謝@serg。 – chrsmrrtt