1.webViewClient private WebViewClient webViewClient = new WebViewClient() { @Override public void onPageFinished(final WebView view, String url) { super.onPageFinished(view, url); //网页加载完毕做处理 可以通过view.getTitle()获取title } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { L.e("web_view", "started: "+ url); super.onPageStarted(view, url, favicon); } //可以拦截到加载的url @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { L.e("web_view", "loading: "+ url); //在这里可以对url进行一些处理,替换字段,新增参数等 if(url!=null&&url.contains("getCoupon?couponId")){ Intent intent=new Intent(); startActivity(intent); return true;//代表拦截此链接,执行了跳转界面的操作,webView不会加载此链接 } return super.shouldOverrideUrlLoading(view, url); } };
2.返回按钮的处理,如果网页有上一层,先返回上一层
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); //goBack()表示返回WebView的上一页面 return true; } return super.onKeyDown(keyCode, event); }
3.通过js进行交互(h5调用native)
private void initView() { WebSettings webSettings = getSettings(); webSettings.setJavaScriptEnabled(true);//设置支持js //设置js调用的接口 this.addJavascriptInterface(new AbsClientCallback(), "android"); } public class AbsClientCallback { //js调用native的回调 @Keep @JavascriptInterface public String callBackNative(String type, String scheme) { return onCallBackNativeForH5(type, scheme); } }
4.native通过js调用h5(约定好的函数)
mWebView.loadUrl("javascript:righthandleparam('android')");
5.对webView的设置setting全部设置上去就好,少设置的话可能会有一些不知名的问题