【问题标题】:Calling iPhone location services with PhoneGap requests permission for the URL to access gps, not the application使用 PhoneGap 调用 iPhone 定位服务请求 URL 访问 gps 的权限,而不是应用程序
【发布时间】:2012-03-15 13:21:30
【问题描述】:

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

【问题讨论】:

    标签: iphone cordova uiwebview geolocation


    【解决方案1】:

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

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-24
        • 2012-06-29
        • 2020-06-29
        • 2018-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多