我有一个用于跨平台支持的 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/