总体归纳为下图:
当前开源项目如:https://github.com/lzyzsd/JsBridge 都是使用的上面方式
详细:
https://blog.csdn.net/carson_ho/article/details/64904691
webview 参数设置(兼容htmll5特性):
WebSettings webSettings = webView.getSettings();
// 支持javascript
webSettings.setJavaScriptEnabled(true);
// 支持使用localStorage(H5页面的支持)
webSettings.setDomStorageEnabled(true);
// 支持数据库
webSettings.setDatabaseEnabled(true);
// 支持缓存
webSettings.setAppCacheEnabled(true);
String appCaceDir = this.getApplicationContext().getDir("cache", Context.MODE_PRIVATE).getPath();
webSettings.setAppCachePath(appCaceDir);
// 设置可以支持缩放
webSettings.setUseWideViewPort(true);
// 扩大比例的缩放
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
// 隐藏缩放按钮
webSettings.setDisplayZoomControls(false);
// 自适应屏幕
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webSettings.setLoadWithOverviewMode(true);
// 隐藏滚动条
webView.setHorizontalScrollBarEnabled(false);
webView.setVerticalScrollBarEnabled(false);
// 进度显示及隐藏
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress >= 99) {
pv.setVisibility(View.INVISIBLE);
} else {
pv.setVisibility(View.VISIBLE);
}
}
});
// 处理网页内的连接(自身打开)
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
});
webView.loadUrl(Cons.Url.ROOT);
// 使用返回键的方式防止网页重定向
webView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack();
return true;
}
}
return false;
}
});