我找到了问题的原因。
调用navigator.geolocation.getCurrentPosition(onsuccess, onerror)
发生在 Phonegap 完全加载之前。
这意味着webview的地理定位调用(而不是通过 PhoneGap 的本地调用)被触发,这将再次请求许可(这确实有意义)。将其与智能手机上的普通 Safari 浏览器进行比较。它会要求每个新网站的地理位置许可。在应用程序启动时通过 PhoneGap 加载 index.html 时也是如此。
但是,解决方案是等待 PhoneGap 完全加载时触发的 deviceready 事件:
document.addEventListener("deviceready", function(){
navigator.geolocation.getCurrentPosition(onsuccess, onerror, params);
}, false);
这将使 PhoneGap API 可用,它会覆盖浏览器的默认 HTML5 地理定位调用,并通过本机调用(您已在第一个提示中接受)获取设备的地理位置。
这将起作用,因为 PhoneGap 的 API 调用与 HTML5 的标准 W3C 调用相同:http: //docs.phonegap.com/en/2.2.0/cordova_geolocation_geolocation.md.html#Geolocation