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

Posted

技术标签:

【中文标题】Chrome中的地理定位API:位置未定义的坐标属性【英文标题】:Geolocation API in Chrome: coord property of Position undefined 【发布时间】:2011-08-26 20:23:12 【问题描述】:

我正在 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 对象就出现了。

我为防止此错误所做的尝试包括:

    将 getCurrentPosition 调用移到回调函数声明之后 将 geoLoc.coords 分配给 XY 变量作为 doStuff() 函数的第一行(执行此操作后,正是这部分代码导致了错误)

我是否错误地调用了 Position 对象?是 Chrome 的怪癖吗?这与确定位置所花费的时间有关吗?

谢谢, 克里斯。

【问题讨论】:

您是从file:// URL 运行的吗?如果是这样,请尝试从http:// 【参考方案1】:

因此未定义:

<body onload="doStuff()">

也许你想要这样的东西:

function init() 
    navigator.geolocation.getCurrentPosition(doStuff, error, setOptions);

...
<body onload="init()">

【讨论】:

以上是关于Chrome中的地理定位API:位置未定义的坐标属性的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 地理定位传感器破坏 CORS

地理位置未捕获类型错误:无法读取未定义的属性“坐标”

通过 React-Redux 进行地理定位

使用 chrome 扩展更改地理位置?

HTML5地理位置定位Geolocation-API及Haversine地理空间距离算法

HTML5地理位置定位Geolocation-API及Haversine地理空间距离算法