Chrome中的地理位置API:位置未定义的coord属性

时间:2011-08-26 20:23:13

标签: javascript html5 google-chrome geolocation

我在Google Chrome(v13)中尝试使用Geolocation API。我已经制作了一个简单的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()函数的第一行(执行此操作后,导致错误的是此部分代码)
  3. 我是否错误地调用了Position对象?是Chrome的怪癖吗?这与确定位置的时间有关吗?

    谢谢, 克里斯。

1 个答案:

答案 0 :(得分:2)

因为这个原因而未定义:

<body onload="doStuff()">

也许你想要这样的东西:

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