8

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

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

当我点击“ok”时,它会再次提示我同样的问题,但这次它指出“index.html”需要使用地理位置的权限。

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

但是,因为不会带来很好的用户体验:

如何防止这种双重提示?(如果可以防止第二个提示,我就足够了)

4

4 回答 4

14

我找到了问题的原因。

调用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

于 2012-12-13T14:03:31.723 回答
0

看看这个: 在 iPhone 上使用 PhoneGap 的位置许可警报

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

于 2012-12-13T10:03:08.623 回答
0

终于解决了这个问题。

在 index.html 中,只需将您的 cordova.js 向上移动

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

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

于 2014-07-18T11:28:06.287 回答
0

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

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

作为要包含的最后一个脚本

于 2015-07-13T23:17:49.240 回答