API геолокации в Chrome: свойство координат положения неопределено - PullRequest
1 голос
/ 27 августа 2011

Я экспериментирую с API геолокации в Google Chrome (v13).Я создал простую HTML-страницу, чтобы разобраться с основами:

<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)

Отладка выглядит так, как будто объект Position не определен при первом вызове - строка, имеющая отношение к широте.Тем не менее, нет ошибок для дальнейших строк.Фактически, после линии широты объект Postition появляется.

Вещи, которые я пытался предотвратить, включают:

  1. Перемещение вызова getCurrentPosition после объявления функции обратного вызова
  2. присваивает geoLoc.coords переменной XY в качестве первой строки функции doStuff () (после этого именно эта часть кода вызвала ошибку)

Я неправильно называю объект Position?Это Хром Причуд?Это как-то связано со временем, которое требуется для определения позиции?

Спасибо, Крис.

1 Ответ

2 голосов
/ 27 августа 2011

Не определено из-за этого:

<body onload="doStuff()">

Может быть, вы хотели что-то вроде этого:

function init() {
    navigator.geolocation.getCurrentPosition(doStuff, error, setOptions);
}
...
<body onload="init()">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...