适用于iOS和Android的HTML5 Geolocation

时间:2016-11-14 02:00:25

标签: android ios html5 uiwebview geolocation

我有一个用于跨平台支持的HTML5 / jquery-mobile应用程序。我有Android的WebView和iOS,UIWebView指向我的网站。我需要地理定位服务,您可以使用WebView ChromeClient将设备权限从Android传递到网络应用。

webView.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback){
        callback.invoke(origin, true, false);
    }
});

在iOS中没有这样的东西。每次我使用该应用程序时,我都会从iOS应用程序和Web应用程序中获得两个权限请求对话框。我不使用phonegap / cordova,也不需要它们。这个问题困扰了我几个星期,其他所有遇到此问题的人都使用phonegap / cordova。

navigator.geolocation.getCurrentPosition(function(position){
    // geolocation logic
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您无法在UIWebView AFAIK中避免该警报。您可以使用iOS位置API获取当前位置并将其传递到网页。有很多方法可以做到这一点:

  • UIWebView stringByEvaluatingJavaScriptFromString(“window.iosLocation = 43.3,-79.9”),在页面上可以检查UA以查看是否应该设置此值,或者可以在加载完成后等待1-2秒如果未设置此prop,则使用HTML5 geo。你可以在UIWebViewDelegate.webViewDidFinishLoad
  • 上注入它
  • 让您的页面尝试回调iOS本机代码,虽然这比上面的复杂得多(需要js注入/覆盖页面加载)
  • 在应用开始时为您的域设置包含该位置的Cookie,然后尝试阅读页面上的Cookie,请参阅此处有关如何设置Cookie的信息:How to manage cookies with UIWebView in Swift