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

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

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

当我点击“确定”,它会再次提示我有同样的问题,但这次它声明“index.html”想要使用地理定位的权限。

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

但是,由于不会带来很好的用户体验:

我怎样才能防止这种双重提示? (如果第二个提示可以被阻止,我就足够了)

我find了问题的原因。

调用navigator.geolocation.getCurrentPosition(onsuccess, onerror)发生在Phonegap完全加载之前。

这意味着webview的地理位置调用(而不是通过PhoneGap本地调用)正在触发,这将再次要求许可(这是有道理的)。 将其与智能手机上的正常Safari浏览器进行比较。 它会要求每个新网站的地理位置权限。 在应用程序启动时通过PhoneGap加载index.html是一样的。

但是,解决scheme是等待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

看看这个: PhoneGap iPhone上的位置权限提醒

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

最后解决了这个问题。

在index.html中,只需移动cordova.js即可

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

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

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

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

作为最后的脚本被包括在内