不知不觉就3月1号了,这段时间在想怎么来收尾这个系列,打算把css小结放在踩坑那一章,那一章之后估计也会不定时更新。最后一章就简单分析一下流程原理。javascript
仍是言归正传吧,webview是一个基于webkit引擎、展示web页面的控件,app里面是常常用到的,weex官方提供了web组件。css
webview这块是比较复杂的,因此官方提供的远远不够,可是对原生又不是很熟悉,就找到组件源码,在此基础上再进行二次封装,上一章也是有很详细的提到的。html
进行了二次封装,咱们想添加功能配置什么的就方便不少了。vue
iOS端的webview坑要少一些,几乎没怎么改过,主要就是html和原生的交互。
一、能够用到URL Schemes来拦截作一些简单的跳转处理
二、实在绕不过,就用到了一个比较复杂的WebViewJavascriptBridge,我用的就是谷歌搜出来第一个,参照例子加在咱们本身封装的组件里面了,我这边直接就加在了viewWillAppear方法里面,同理也须要在html里面配置,最后app就能监听到html里面的点击等交互动做了。java
安卓要麻烦许多,网上大多也都是安卓的webview讲解,我也是遇到了好多坑。
我把网上须要配置的基本都加上了,每一个设置的说明看方法能猜出一二。
一、而后就是shouldOverrideUrlLoading,页面跳转遇到的无限加载、白屏等都须要在这个方法里面作处理,因为这块涉及业务处理,也就不截出来了,我也是参照网上的方案解决的,须要耐心,多试几回,会解决的。web
private void initWebView(WebView wv) { WebSettings settings = wv.getSettings(); settings.setAppCacheEnabled(true); settings.setAllowFileAccess(true);//设置启用或禁止访问文件数据 settings.setDomStorageEnabled(true); settings.setLoadsImagesAutomatically(true); //适应屏幕 settings.setUseWideViewPort(true); // 设置能够支持缩放 settings.setSupportZoom(true); // 设置出现缩放工具 settings.setBuiltInZoomControls(true); //不显示webview缩放按钮 settings.setDisplayZoomControls(false); settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); settings.setLoadWithOverviewMode(true); // 设置与Js交互的权限 settings.setJavaScriptEnabled(true); // 设置容许JS弹窗 settings.setJavaScriptCanOpenWindowsAutomatically(true); //设置字体大小 settings.setTextZoom(100); wv.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
二、接着就是安卓的上传图片文件,用到了以下的方法,最后用到的是WXWebView.mUploadCallbackAboveL 回传图片的apache
// For Android < 3.0 public void openFileChooser(ValueCallback<Uri> valueCallback) { mUploadMessage = valueCallback; openImageChooserActivity(); } // For Android >= 3.0 public void openFileChooser(ValueCallback valueCallback, String acceptType) { mUploadMessage = valueCallback; openImageChooserActivity(); } //For Android >= 4.1 public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType, String capture) { //Log.e(TAG, "onShowFileChooser: "+acceptType); mUploadMessage = valueCallback; openImageChooserActivity(); } // For Android >= 5.0 @Override public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { //Log.e(TAG, "onShowFileChooser: "+fileChooserParams); mUploadCallbackAboveL = filePathCallback; openImageChooserActivity(); return true; }
三、还有一个点是webview里面音视频播放,退出页面,还会有声音等,能够在原生.java的onPause方法里面作处理,我记得这个没处理的时候有的安卓应用商店都是审核不过的。segmentfault
@Override public void onPause() { super.onPause(); if(WXWebView.mWebView != null){ WXWebView.mWebView.pauseTimers(); //这里只对页面中只有一个音频的状况作了处理,若是有多个音频须要遍历整个数组记录状态 WXWebView.mWebView.loadUrl( "javascript:audioEty = document.getElementsByTagName('audio')[0]; audioEty.pause();" ); WXWebView.mWebView.loadUrl( "javascript:videoEty = document.getElementsByTagName('video')[0]; videoEty.pause();" ); WXWebView.mWebView.onPause(); } }
最后原本是打算想把app的宽高适配等问题放在css那个小结的,可是如今归类在了踩坑里面,就把这个放在这儿讲吧。
一、iOS我是在viewDidLayoutSubviews里面从新绘制了一下,在适配iPhoneX、XR、XMAX的时候会用到,安卓却是没有怎么处理。api
_instance.frame = CGRectMake(safeArea.left, safeArea.top, self.view.frame.size.width-safeArea.left-safeArea.right, _weexHeight-safeArea.top);
二、weex官网config这一章里面有讲到
这个例子,你们也能够扫码看一下,主要就是weex.config.env.deviceWidth和weex.config.env.deviceHeight。数组
最后这个系列就剩下两章了,下一篇也会尽快发布出来,感谢你们,若是喜欢欢迎收藏点赞啊~