使用PhoneGap调用iPhone定位服务请求URL访问gps的权限,而不是应用程序
我有一个应用程序正在利用PhoneGap(版本1.4.1)。它不是一个普通的PhoneGap应用程序,因为该应用程序是使用MonoTouch而不是Xcode构建的。PhoneGap库正在加载到IUWebView中,PhoneGap-1.4.1.js文件位于远程服务器上。我可以调用PhoneGap API中的函数,一切正常;我唯一的问题是PhoneGap地理定位API。虽然地理定位可以工作,但每次加载网页时,都会请求使用iPhone locations服务的权限,但它不会请求对我的应用程序名的权限,而是请求对页面源所在的URL的权限。所以警报会说“http://xxx.xxx.xxx.xxx 如果用户回答“允许”,iphone将不记得这一点,因为它将在下次重新加载页面时再次询问使用PhoneGap调用iPhone定位服务请求URL访问gps的权限,而不是应用程序,iphone,cordova,uiwebview,geolocation,Iphone,Cordova,Uiwebview,Geolocation,我有一个应用程序正在利用PhoneGap(版本1.4.1)。它不是一个普通的PhoneGap应用程序,因为该应用程序是使用MonoTouch而不是Xcode构建的。PhoneGap库正在加载到IUWebView中,PhoneGap-1.4.1.js文件位于远程服务器上。我可以调用PhoneGap API中的函数,一切正常;我唯一的问题是PhoneGap地理定位API。虽然地理定位可以工作,但每次加载网页时,都会请求使用iPhone locations服务的权限,但它不会请求对我的应用程序名的权限
有人知道为什么我对PhoneGap地理定位API的调用会这样做吗?这是让PhoneGap请求我的应用程序使用定位服务而不是URL的某种方式吗?这是因为PhoneGap使用网络视图。和Safari一样,webview可以加载任何URL,因此它必须逐个URL进行查询。我找到了解决此问题的方法。PhoneGap使用自己的函数替换所有UIWebView/MobileSafari navigator.geolocation函数,以便调用navigator.geolocation函数将执行相应的PhoneGap函数。要查看javascript源代码中发生的情况,请搜索以下行:
if (typeof navigator._geo == "undefined")
这一行下面的描述描述了PhoneGap试图避免的问题。不过,主要问题是我在jquery的document.ready处理程序中执行了以下操作:
navigator.geolocation.getCurrentPosition(onGpsSuccess,onGpsError,{enableHighAccurance:true})
在执行过程中的这一点上,PhoneGap初始化尚未完成,因此对navigator.geolocation.getCurrentPosition的调用调用调用了MobileSafari的版本的getCurrentPosition,而不是PhoneGap。我通过放置警报(navigator.\u geo)确定初始化未完成;在document.ready中,发现它返回未定义
然后,解决方案是用以下代码替换文档中的代码行:
document.addEventListener("deviceready", function() {
navigator.geolocation.getCurrentPosition(onGpsSuccess, onGpsError, { enableHighAccuracy: true });
}, false);
这确保了仅在PhoneGap完成初始化时才调用navigator.geolocation
因此,如果遇到此问题,请检查以下各项:
document.addEventListener("deviceready", function() {
navigator.geolocation.getCurrentPosition(onGpsSuccess, onGpsError, { enableHighAccuracy: true });
}, false);