博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Weex系列(6) —— web组件和webview
阅读量:7041 次
发布时间:2019-06-28

本文共 4017 字,大约阅读时间需要 13 分钟。

目录

  • [Weex系列(8) —— 原理流程简析]

不知不觉就3月1号了,这段时间在想怎么来收尾这个系列,打算把css小结放在踩坑那一章,那一章以后估计也会不定时更新。最后一章就简单分析一下流程原理。

还是言归正传吧,webview是一个基于webkit引擎、展现web页面的控件,app里面是经常用到的,weex官方提供了web组件。

webview这块是比较复杂的,所以官方提供的远远不够,但是对原生又不是很熟悉,就找到组件源码,在此基础上再进行二次封装,也是有很详细的提到的。

进行了二次封装,我们想添加功能配置什么的就方便很多了。

iOS

iOS端的webview坑要少一些,几乎没怎么改过,主要就是html和原生的交互。

1、可以用到URL Schemes来拦截做一些简单的跳转处理
2、实在绕不过,就用到了一个比较复杂的WebViewJavascriptBridge,我用的就是谷歌搜出来第一个,参照例子加在我们自己封装的组件里面了,我这边直接就加在了viewWillAppear方法里面,同理也需要在html里面配置,最后app就能监听到html里面的点击等交互动作了。

Android

安卓要麻烦许多,网上大多也都是安卓的webview讲解,我也是遇到了好多坑。

我把网上需要配置的基本都加上了,每个设置的说明看方法能猜出一二。
1、然后就是shouldOverrideUrlLoading,页面跳转遇到的无限加载、白屏等都需要在这个方法里面做处理,由于这块涉及业务处理,也就不截出来了,我也是参照网上的方案解决的,需要耐心,多试几次,会解决的。

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) {

2、接着就是安卓的上传图片文件,用到了如下的方法,最后用到的是WXWebView.mUploadCallbackAboveL 回传图片的

// For Android < 3.0            public void openFileChooser(ValueCallback
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
valueCallback, String acceptType, String capture) { //Log.e(TAG, "onShowFileChooser: "+acceptType); mUploadMessage = valueCallback; openImageChooserActivity(); } // For Android >= 5.0 @Override public boolean onShowFileChooser(WebView webView, ValueCallback
filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { //Log.e(TAG, "onShowFileChooser: "+fileChooserParams); mUploadCallbackAboveL = filePathCallback; openImageChooserActivity(); return true; }

3、还有一个点是webview里面音视频播放,退出页面,还会有声音等,可以在原生.java的onPause方法里面做处理,我记得这个没处理的时候有的安卓应用商店都是审核不过的。

@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那个小结的,但是现在归类在了踩坑里面,就把这个放在这儿讲吧。

1、iOS我是在viewDidLayoutSubviews里面重新绘制了一下,在适配iPhoneX、XR、XMAX的时候会用到,安卓倒是没有怎么处理。

_instance.frame = CGRectMake(safeArea.left, safeArea.top, self.view.frame.size.width-safeArea.left-safeArea.right, _weexHeight-safeArea.top);

2、weex官网里面有讲到

,大家也可以扫码看一下,主要就是weex.config.env.deviceWidth和weex.config.env.deviceHeight。

clipboard.png

最后这个系列就剩下两章了,下一篇也会尽快发布出来,感谢大家,如果喜欢欢迎收藏点赞啊~

转载地址:http://kthal.baihongyu.com/

你可能感兴趣的文章
js浮点数存储精度丢失原理
查看>>
友达光电(昆山)第六代LTPS液晶面板厂 成功点亮首片5.5吋Full HD面板 缔造最快速量产记录 展现领先LTPS技术实力...
查看>>
Chrome 暗黑模式最新进展:现在可自动跟随系统主题设置
查看>>
Event Loop是个什么玩意:从 Vue 的 nextTick 说起
查看>>
前PS VR伦敦团队另立门户,创立新的VR工作室
查看>>
jSearch(聚搜) v0.5.0 发布,多项更新和体验优化
查看>>
日志收集(ElasticSearch)串联查询 MDC
查看>>
5.For loops
查看>>
抛砖引玉之~sftp
查看>>
linux mysql 操作命令
查看>>
[20180126]内核参数tcp_keepalive.txt
查看>>
Leetcode打卡 | No.016 最接近的三数之和
查看>>
9.数据库服务器部署之------3步实现远程访问
查看>>
Nginx服务器开箱体验
查看>>
华虹宏力探索智能制造 亚信安全洞察全网风险
查看>>
在PyODPS DataFrame自定义函数中使用pandas、scipy和scikit-learn
查看>>
无人机为何“一夜爆红”?开源飞控在其后助力
查看>>
LG有意进军自动驾驶领域, 或开发基于3D摄像头的安全驾驶辅助系统
查看>>
Android项目实战(十九):Android Studio 优秀插件: Parcelable Code Generator
查看>>
Linux启动/停止/重启Mysql数据库的方法
查看>>