android - 适用于 iOS 和 Android 的 HTML5 地理定位

标签 android ios html uiwebview geolocation

我有一个用于跨平台支持的 HTML5/jquery-mobile 应用程序。我有带有 WebView 的 Android 和带有指向我网站的 UIWebView 的 iOS。我需要地理定位服务,而您可以使用 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
}

如有任何帮助,我们将不胜感激。

最佳答案

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

  • UIWebView stringByEvaluatingJavaScriptFromString("window.iosLocation = 43.3,-79.9"),在页面上可以检查 UA 以查看它是否应该设置它,或者它可以在加载完成后等待 1-2 秒,并且如果未设置此属性,则使用 HTML5 geo。你会在 UIWebViewDelegate.webViewDidFinishLoad 上注入(inject)这个
  • 让您的页面尝试回调 iOS 原生代码,尽管这比上面复杂得多(需要 js 注入(inject)/页面加载时覆盖)
  • 在应用启动时为您的域设置一个包含位置的 cookie,然后尝试读取页面上的 cookie,有关如何设置 cookie,请参见此处:How to manage cookies with UIWebView in Swift

关于android - 适用于 iOS 和 Android 的 HTML5 地理定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40580911/

相关文章:

html - 具有动态高度的多个 div,并保持 2 个并排的 div

javascript - 使用 Javascript 从 HTML 列表框(多选)中的项目生成逗号分隔的字符串

android - 多个 ContentProvider 可以提供相同的 URI 吗?

android - 将 ArrayList 保存到 SharedPreferences

android - 处理程序是否是线程,具有处理程序和线程的Looper的作用是什么?

ios - 如何生成垂直滚动?

ios - 在 APNS 的推送通知中发送摄像头

java - 警报对话框中的上下文

ios - Swift Firebase 持久化

javascript - 在键入值或选择更改时连接值