navigator.geolocation.watchPosition成功回调返回空position对象原因排查
问题根因
你遇到的并非配置遗漏问题,核心原因是GeolocationPosition 原生Web API实例的所有属性均为不可枚举属性,JSON.stringify 执行时默认仅序列化可枚举的自有属性,因此直接序列化该实例只会得到空对象{},实际position实例本身已包含完整的位置数据。
验证方案
你可以通过以下两种方式验证位置数据实际存在:
- 直接打印完整position实例而非序列化结果:
console.log("pos: ", position),在控制台展开对象即可查看所有属性值 - 单独访问实例属性取值:
console.log("纬度:", position.coords.latitude, "经度:", position.coords.longitude)
序列化兼容方案
如果需要序列化位置数据输出,可手动提取需要的属性后再执行序列化,示例代码如下:
navigator.geolocation.watchPosition(position => { // 手动提取可枚举的位置字段 const serializablePos = { coords: { latitude: position.coords.latitude, longitude: position.coords.longitude, accuracy: position.coords.accuracy, altitude: position.coords.altitude, altitudeAccuracy: position.coords.altitudeAccuracy, heading: position.coords.heading, speed: position.coords.speed }, timestamp: position.timestamp } console.log("pos: " + JSON.stringify(serializablePos)); }, errorCb, options);
你当前的watchPosition配置本身没有问题,权限、HTTPS前提满足的情况下接口已经正常返回了位置数据。
内容的提问来源于stack exchange,提问作者paddel10
相关产品推荐
相关产品推荐

