01.前沿说明css
02.如何使用html
03.js调用前端
WebView启动过程大概分为如下几个阶段,这里借鉴美团的一张图片java
如何引用,该x5的库已经更新到最新版本,引用最新1.2.0稳定版android
implementation 'cn.yc:WebViewLib:1.2.0'
项目初始化git
X5WebUtils.init(this);
最普通使用,须要本身作手动设置setting相关属性github
<BridgeWebView android:id="@+id/web_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbarSize="3dp" />
也可使用X5WebView,已经作了常见的setting属性设置web
<X5WebView android:id="@+id/web_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbarSize="3dp" />
若是想有带进度的,可使用ProgressWebView面试
<可使用ProgressWebView android:id="@+id/web_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbarSize="3dp" />
如何使用本身的WebViewClient和WebChromeClientjson
//主要是在X5WebViewClient和X5WebChromeClient已经作了不少常见的逻辑处理,若是不知足你使用,能够以下这样写 MyX5WebViewClient webViewClient = new MyX5WebViewClient(webView, this); webView.setWebViewClient(webViewClient); MyX5WebChromeClient webChromeClient = new MyX5WebChromeClient(this); webView.setWebChromeClient(webChromeClient); private class MyX5WebViewClient extends X5WebViewClient { public MyX5WebViewClient(BridgeWebView webView, Context context) { super(webView, context); } //重写你须要的方法便可 } private class MyX5WebChromeClient extends X5WebChromeClient{ public MyX5WebChromeClient(Activity activity) { super(activity); } //重写你须要的方法便可 }
针对相似购物的商品详情页面的webView
关于web的接口回调,包括常见状态页面切换,进度条变化等监听处理
mWebView.getX5WebChromeClient().setWebListener(interWebListener); private InterWebListener interWebListener = new InterWebListener() { @Override public void hindProgressBar() { pb.setVisibility(View.GONE); } @Override public void showErrorView(@X5WebUtils.ErrorType int type) { //设置自定义异常错误页面 } @Override public void startProgress(int newProgress) { //该方法是是监听进度条进度变化的逻辑 pb.setProgress(newProgress); } @Override public void showTitle(String title) { //该方法是监听h5中title } };
关于视频播放的时候,web的接口回调,主要是视频相关回调,好比全频,取消全频,隐藏和现实webView
x5WebChromeClient = x5WebView.getX5WebChromeClient(); x5WebChromeClient.setVideoWebListener(new VideoWebListener() { @Override public void showVideoFullView() { //视频全频播放时监听 } @Override public void hindVideoFullView() { //隐藏全频播放,也就是正常播放视频 } @Override public void showWebView() { //显示webView } @Override public void hindWebView() { //隐藏webView } });
其余api说明
//X5WebView中 //设置是否开启密码保存功能,不建议开启,默认已经作了处理,存在盗取密码的危险 mWebView.setSavePassword(false); //是否开启软硬件加速 mWebView.setOpenLayerType(false); //获取x5WebChromeClient对象 x5WebChromeClient = mWebView.getX5WebChromeClient(); //获取x5WebViewClient对象 x5WebViewClient = mWebView.getX5WebViewClient();
关于如何使用仿微信加载H5页面进度条
private WebProgress pb; //显示进度条 pb.show(); //设置进度条过分颜色 pb.setColor(Color.BLUE,Color.RED); //设置单色进度条 pb.setColor(Color.BLUE); //为单独处理WebView进度条 pb.setWebProgress(newProgress); //进度完成后消失 pb.hide();
设置cookie和清除cookie操做
//同步cookie X5WebUtils.syncCookie(this,"url",cookieList); //清除cookie X5WebUtils.removeCookie(this);
优化一下相关的操做
@Override public void onResume() { super.onResume(); if (mWebView != null) { mWebView.getSettings().setJavaScriptEnabled(true); } } @Override protected void onStop() { super.onStop(); if (mWebView != null) { mWebView.getSettings().setJavaScriptEnabled(false); } }
@Override protected void onDestroy() { try { if (webView != null) { webView.stopLoading(); webView.destroy(); webView = null; } } catch (Exception e) { Log.e("X5WebViewActivity", e.getMessage()); } super.onDestroy(); }
对于web加载异常,分为多种状态,好比常见的有,没有网络;404加载异常;onReceivedError,请求网络出现error;在加载资源时通知主机应用程序发生SSL错误
@Override public void showErrorView(@X5WebUtils.ErrorType int type) { switch (type){ //没有网络 case X5WebUtils.ErrorMode.NO_NET: break; //404,网页没法打开 case X5WebUtils.ErrorMode.STATE_404: break; //onReceivedError,请求网络出现error case X5WebUtils.ErrorMode.RECEIVED_ERROR: break; //在加载资源时通知主机应用程序发生SSL错误 case X5WebUtils.ErrorMode.SSL_ERROR: break; default: break; } }
java调用js的流程图
js调用Android的流程图
代码以下所示,下面updateAttentionStatus表明js这边的方法名称
mWebView.callHandler("updateAttentionStatus", attention, new CallBackFunction() { @Override public void onCallBack(String data) { } });
代码以下所示,下面中的toPhone表明的是Android这边提供给js的方法名称
mWebView.registerHandler("toPhone", new BridgeHandler() { @Override public void handler(String data, CallBackFunction function) { try { JSONObject jsonData = new JSONObject(data); String phone = jsonData.optString("phone"); //todo 打电话 } catch (JSONException e) { e.printStackTrace(); } } });
如何回调数据给web那边
//注意,这里回传数据目前只是支持String字符串类型 function.onCallBack("回调数据");
onPageFinished()或者onPageStarted()方法中注入js代码
WebViewClient.onProgressChanged()方法中注入js代码
WebViewClient.onProgressChanged()这个方法在dom树渲染的过程当中会回调屡次,每次都会告诉咱们当前加载的进度。
那么有人会问,加载到多少才须要处理js注入逻辑呢?
感谢开源库
参考博客