HTML5 iOS 和 Android 的地理位置
HTML5 Geolocation for iOS and Android
我有一个 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 应用程序和网络应用程序获得两个权限请求对话框。我不使用 phonegap/cordova,也不需要它们。这个问题困扰了我几个星期,遇到这个问题的其他人都使用 phonegap/cordova.
navigator.geolocation.getCurrentPosition(function(position){
// geolocation logic
}
如有任何帮助,我们将不胜感激。
您无法在 UIWebView AFAIK 中避免该警报。您可以使用 iOS location API 获取当前位置并将其传递到网页。有多种方法可以做到这一点:
- UIWebView stringByEvaluatingJavaScriptFromString("window.iosLocation = 43.3,-79.9"), 在页面上可以检查 UA 以查看是否应该设置它,或者它可以在加载完成后等待 1-2 秒,如果这个 prop未设置,则使用 HTML5 geo。你会在 UIWebViewDelegate.webViewDidFinishLoad
上注入这个
- 让您的页面尝试回调 iOS 本机代码,尽管这比上面复杂得多(页面加载时需要 js injection/overrides)
- 在应用程序启动时为您的域设置一个包含位置的 cookie,然后尝试读取页面上的 cookie,请参阅此处了解如何设置 cookie:How to manage cookies with UIWebView in Swift
我有一个 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 应用程序和网络应用程序获得两个权限请求对话框。我不使用 phonegap/cordova,也不需要它们。这个问题困扰了我几个星期,遇到这个问题的其他人都使用 phonegap/cordova.
navigator.geolocation.getCurrentPosition(function(position){
// geolocation logic
}
如有任何帮助,我们将不胜感激。
您无法在 UIWebView AFAIK 中避免该警报。您可以使用 iOS location API 获取当前位置并将其传递到网页。有多种方法可以做到这一点:
- UIWebView stringByEvaluatingJavaScriptFromString("window.iosLocation = 43.3,-79.9"), 在页面上可以检查 UA 以查看是否应该设置它,或者它可以在加载完成后等待 1-2 秒,如果这个 prop未设置,则使用 HTML5 geo。你会在 UIWebViewDelegate.webViewDidFinishLoad 上注入这个
- 让您的页面尝试回调 iOS 本机代码,尽管这比上面复杂得多(页面加载时需要 js injection/overrides)
- 在应用程序启动时为您的域设置一个包含位置的 cookie,然后尝试读取页面上的 cookie,请参阅此处了解如何设置 cookie:How to manage cookies with UIWebView in Swift