最近开发一个Web壳app,我用的是Webview加载前端页面,本来应该是挺简单的事,但是开发过程中Webview的坑还是比较多(IOS一点事都没有,只能说搞Android的命苦),在这总结一下:
主要原因:A:在Android 4.4以下(不包含4.4)系统WebView底层实现是采用WebKit(http://www.webkit.org/)内核,而在Android 4.4及其以上Google 采用了chromium(http://www.chromium.org/)作为系统WebView的底层内核支持。
B:部分WebView的API在不同的Android版本中不同,所以需要去适配不同的版本,贼坑。
C:Android对前端的一些标签不支持。
Bug1.在Android4.4版本中Webview定位功能失效,我自己5.0的系统可以定位(Android4.4以下没有去测试)。
原因:Android4.4以下需要我们自己去打开数据库,开启定位。
解决办法:
mWebView.addJavascriptInterface(this, "android"); // 让WebView能够执行javaScript mWebSettings = mWebView.getSettings(); mWebSettings.setJavaScriptEnabled(true); mWebView.getSettings().setDomStorageEnabled(true); //启用数据库 mWebSettings.setDatabaseEnabled(true); String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath(); //启用地理定位 mWebSettings.setGeolocationEnabled(true); //设置定位的数据库路径 mWebSettings.setGeolocationDatabasePath(dir);并且在WevChromeClient中实现:
onGeolocationPermissionsShowPrompt();
Bug2.在上传本地文件不成功
原因:Android对前端的input标签不支持
解决办法:在WevChromeClient中实现以下方法:
private ValueCallback<Uri[]> UploadMessage; public ValueCallback<Uri> mUploadMessage; private static final int KITKAT_RESULTCODE = 99; public static final int REQUEST_SELECT_FILE = 100; pu