我有一个使用PhoneGap(版本1.4.1)的应用程序。它不是普通的PhoneGap应用程序,因为应用程序是使用MonoTouch而不是Xcode构建的。 PhoneGap库正在加载到IUWebView中, phonegap-1.4.1.js 文件位于远程服务器上。我可以调用PhoneGap API中的函数,一切正常;我唯一的问题是使用PhoneGap Geolocation API。尽管地理位置有效,但每次加载网页时都会要求获得权限请求以使用iPhone位置服务,但它不会请求我的应用程序名称的权限,它会请求页面源所在的URL的权限。所以警报会说“http://xxx.xxx.xxx.xxx想要使用你当前的位置”而我用户回答“允许”,iphone不记得了,因为它会在下一次再次询问页面重装。
有谁知道为什么我对PhoneGap地理定位API的调用是这样做的?我是否有办法让PhoneGap请求我的应用程序使用位置服务而非URL来获得权限?
答案 0 :(得分:2)
我找到了解决这个问题的方法。 PhoneGap用自己的函数替换所有UIWebView / MobileSafari navigator.geolocation 函数,以便调用 navigator.geolocation 函数将执行相应的PhoneGap函数。要查看javascript源代码中发生的情况,请搜索以下行:
if (typeof navigator._geo == "undefined")
直接在此行下的描述描述了PhoneGap试图避免的这个问题中概述的问题。但主要问题是我在jquery的 document.ready 处理程序中执行以下操作:
navigator.geolocation.getCurrentPosition(onGpsSuccess,onGpsError,{enableHighAccuracy:true});
并且在执行时此时PhoneGap初始化尚未完成,因此对 navigator.geolocation.getCurrentPosition 的调用称为 MobileSafari的版本的getCurrentPosition,而不是PhoneGap的。我确定通过放置 alert(navigator。 _geo)来完成初始化。在 document.ready 中,发现它返回 undefined 。
然后解决方案是使用以下内容替换 document.ready 中的代码行:
document.addEventListener("deviceready", function() {
navigator.geolocation.getCurrentPosition(onGpsSuccess, onGpsError, { enableHighAccuracy: true });
}, false);
这确保仅在PhoneGap完成初始化时调用navigator.geolocation。
因此,如果您遇到此问题,请检查以下内容:
答案 1 :(得分:0)
那是因为PhoneGap使用WebViews。和Safari一样,webview可以加载任何URL,因此它必须按URL查询URL。