繁体   English   中英

如何防止在Phonegap应用程序中双重提示地理位置?

[英]How to prevent double prompt for geolocation in Phonegap app?

我为iPhone创建了一个PhoneGap应用程序,它通过webview中的JavaScript使用地理定位。

当我第一次运行应用程序时,它会提示我允许这个应用程序的地理位置。

当我点击“确定”时,它会再次提示我同样的问题,但这一次它说“index.html”想要使用地理位置的许可。

这是有道理的,因为iOS可能希望允许第一次允许应用程序本身的地理定位,并且第二次浏览器需要权限。

但是,由于不会带来出色的用户体验:

如何防止此双重提示? (如果可以防止第二次提示,我就够了)

我找到了问题的原因。

调用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 gelocation调用,并通过本机调用获取设备的地理位置(您已在第一个提示中接受)。

这将起作用,因为PhoneGap的API调用与HTML5的标准W3C调用相同: http//docs.phonegap.com/en/2.2.0/cordova_geolocation_geolocation.md.html#Geolocation

看看这个: 带有PhoneGap的iPhone上的位置许可警报

第二个似乎是Webkit警报。 为了防止这种情况,您似乎只需将所有js文件移动到根目录。 告诉我,如果它有效,因为我将很快解决同样的问题。

最后解决了这个问题。

在index.html中只需移动你的cordova.js

<script src =“cordova.js”> </ script>

作为要包含的第一个js文件(特别是确保它在地图上方包括js)。 这将确保提示只显示一次

我通过移动来解决这个问题

<script src="cordova.js"></script>

作为要包含最后一个脚本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM