使用PhoneGap调用iPhone位置服务请求URL访问gps的权限,而不是应用程序

时间:2012-02-25 06:18:44

标签: iphone cordova uiwebview geolocation

我有一个使用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来获得权限?

2 个答案:

答案 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. 您正在使用最新版本的PhoneGap来处理此问题。
  2. 在PhoneGap准备就绪之前,您没有尝试使用 navigator.geolocation

答案 1 :(得分:0)

那是因为PhoneGap使用WebViews。和Safari一样,webview可以加载任何URL,因此它必须按URL查询URL。