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全部设置上去就好,少设置的话可能会有一些不知名的问题
网友评论