YCWebView

Introduction: 基于腾讯 x5 开源库,提高 webView 开发效率,大概要节约你百分之六十的时间成本。该案例支持处理 js 的交互逻辑且无耦合、同时暴露进度条加载进度、可以监听异常 error 状态、支持视频播放并且可以全频、支持加载 word,xls,ppt,pdf,txt 等文件文档、发短信、打电话、发邮件、打开文件操作上传图片、唤起原生 App、x5 库为最新版本,功能强大。
More: Author   ReportBugs   
Tags:

目录介绍

  • 01.该库具有的功能
  • 02.该库如何使用
  • 03.js 调用原理
  • 04.问题反馈总结
  • 05.WebView 优化
  • 06.WebView 知识点
  • 07.WebView 缓存
  • 08.其他说明介绍

01.前沿说明

  • 基于腾讯 x5 开源库,提高 webView 开发效率,大概要节约你百分之六十的时间成本。该案例支持处理 js 的交互逻辑且无耦合、同时暴露进度条加载进度、可以监听异常 error 状态、支持视频播放并且可以全频、支持加载 word,xls,ppt,pdf,txt 等文件文档、发短信、打电话、发邮件、打开文件操作上传图片、唤起原生 App、x5 库为最新版本,功能强大。项目地址:webView 开源库

1.1 案例展示效果

  • WebView 启动过程大概分为以下几个阶段,这里借鉴美团的一张图片
    • image

1.2 该库功能和优势

类型 功能说明
项目介绍 x5WebView + 拦截缓存(okHttp) + HttpDns 解析优化方案 + 视频播放 + js 交互
开发效率 大概要节约你百分之六十的时间成本,配置简单,使用炒鸡简单,api 文档和注释炒鸡详细
视频播放 支持视频播放,可以切换成全频播放视频,可旋转屏幕,暴露视频操作监听 listener 给开发者
js 交互逻辑 方便快捷,并且无耦合,操作十分简单
加载进度监听 暴露进度条加载进度,结束,以及异常状态(分多种状态:无网络,404,onReceivedError,sslError 异常等)listener 给开发者
加载文件 支持加载 word,xls,ppt,pdf,txt 等文件文档,使用方法十分简单
重定向 优雅解决重定向回退,白屏等问题
https+dns 添加了阿里的 https+dns 优化方案,按照配置初始化填入 accountID 和 host 即可使用,默认没有使用
夜间模式 支持设置夜间模式,一行代码即可设置
文件操作 支持打开文件的操作,比如打开相册,然后选中图片上传,兼容版本(5.0)
刘海屏适配 支持设置刘海屏适配,对于刘海屏机器如果 webview 被遮挡会自动 padding
仿微信进度条 支持设置仿微信加载 H5 页面进度条,完全无耦合,操作简单,极大提高用户体验
自定义 支持用户按照规范自定义 WebViewClient 和 WebChromeClient,不影响 js 通信
缓存 除了 webView 自带缓存外,还添加了资源拦截缓存,交给 OkHttp 去做,支持设置超时,设置缓存空间大小
scheme 统一处理 web 页面打电话,发短信,定位,邮件,开启支付宝,微信等 scheme 拦截处理
无痕模式 支持设置无痕模式
问题汇总 汇集绝大多数问题,以及解决方案,是学习和深入理解 webView 的一个比较全面的案例
设计思想 充分运用了面向对象的设计思想,将视频全屏播放,scheme 拦截,web 进度条,拦截缓存抽成独立的部分,你也可以拿来即用,完全解耦

02.该库如何使用

  • 2.1 如何引入该库
  • 2.2 最简单使用
  • 2.3 常用 api 说明
  • 2.4 使用建议
  • 2.5 关于 web 页面异常状态区分类型
  • 2.6 如何使用拦截缓存
  • 2.7 使用 Https+Dns
  • 2.8 js 交互操作处理
  • 2.9 关于添加混淆

03.js 调用原理

  • 01.WebView 加载 html 页面
  • 02.加载 WebViewJavascriptBridge.js
  • 03.分析 WebViewJavascriptBridge.js
  • 04.页面 Html 注册”functionInJs”方法
  • 05.“functionInJs”执行结果回传 Java
  • 06.该库交互流程图

04.问题反馈总结

  • 4.0.0 WebView 进化史介绍
  • 4.0.1 提前初始化 WebView 必要性
  • 4.0.2 x5 加载 office 资源
  • 4.0.3 WebView 播放视频问题
  • 4.0.4 无法获取 webView 的正确高度
  • 4.0.5 使用 scheme 协议打开链接风险
  • 4.0.6 如何处理加载错误
  • 4.0.7 webView 防止内存泄漏
  • 4.0.8 关于 js 注入时机修改
  • 4.0.9 视频播放宽度超过屏幕
  • 4.1.0 如何保证 js 安全性
  • 4.1.1 如何代码开启硬件加速
  • 4.1.2 WebView 设置 Cookie
  • 4.1.3 开启硬件加速导致的闪烁问题
  • 4.1.4 webView 加载网页不显示图片
  • 4.1.5 绕过证书校验漏洞
  • 4.1.6 allowFileAccess 漏洞
  • 4.1.7 WebView 嵌套 ScrollView 问题
  • 4.1.8 WebView 中图片点击放大
  • 4.1.9 页面滑动期间不渲染/执行
  • 4.2.0 被运营商劫持和注入问题
  • 4.2.1 解决资源加载缓慢问题
  • 4.2.2 判断是否已经滚动到页面底端
  • 4.2.3 使用 loadData 加载 html 乱码
  • 4.2.4 WebView 下载进度无法监听
  • 4.2.5 webView 出现 302/303 重定向
  • 4.2.6 webView 出现 302/303 白屏
  • 4.2.8 onReceiveError 问题
  • 4.2.9 loadUrl 在 19 以上超过 2097152 个字符失效
  • 4.3.0 WebViewJavascriptBridge: WARNING
  • 4.3.1 Android 与 js 传递数据大小有限制
  • 4.3.2 多次调用 callHandler 部分回调函数未被调用
  • 4.3.3 字符串转义 bug 探讨
  • 4.3.8 Javascript 调用原生方法会偶现失败
  • 4.3.9 dispatchMessage 运行主线程问题
  • 4.4.0 怎么实现 WebView 免流方案
  • 4.4.1 Channel is unrecoverably broken and will be disposed!
  • 4.4.2 定制 js 的 alert,confirm 和 prompt 对话框
  • 4.4.3 x5 长按图片如何操作
  • 4.4 4 x5 长按文字内容如何自定义弹窗
  • 4.4.5 webView.goBack()会刷新页面吗
  • 4.4.6 mWebView.scrollTo(0, 0)回顶部失效
  • 4.4.7 部分手机监听滑动顶部或底部失效
  • 4.4.8 prompt 的一个坑导致 js 挂掉
  • 4.4.9 webView 背景设置为透明无效探索
  • 4.5.0 如何屏蔽掉 WebView 中长按事件
  • 4.5.1 WeView 出现 OOM 影响主进程如何避免
  • 4.5.2 WebView 域控制不严格漏洞
  • 4.5.3 下载文件时的路径穿越问题
  • 4.5.4 WebView 中 http 和 https 混合使用问题
  • 4.5.5 调用系统 EMAIL 发送邮件崩溃
  • 4.5.7 WebView 访问部分网页崩溃问题

05.webView 优化

  • 5.0.1 视频全屏播放按返回页面被放大
  • 5.0.2 加快加载 webView 中的图片资源
  • 5.0.3 自定义加载异常 error 的状态页面
  • 5.0.4 WebView 硬件加速导致页面渲染闪烁
  • 5.0.5 WebView 加载证书错误
  • 5.0.6 web 音频播放销毁后还有声音
  • 5.0.7 DNS 采用和客户端 API 相同的域名
  • 5.0.8 如何设置白名单操作
  • 5.0.9 后台无法释放 js 导致发热耗电
  • 5.1.0 可以提前显示加载进度条
  • 5.1.1 WebView 密码明文存储漏洞优化
  • 5.1.2 页面关闭后不要执行 web 中 js
  • 5.1.3 WebView + HttpDns 优化
  • 5.1.4 如何禁止 WebView 返回时刷新
  • 5.1.5 WebView 处理 404、300 逻辑
  • 5.1.6 WebView 判断断网和链接超时
  • 5.1.7 @JavascriptInterface 注解方法注意点
  • 5.1.8 使用 onJsPrompt 实现 js 通信注意点
  • 5.1.9 Cookie 同步场景和具体操作
  • 5.2.0 shouldOverrideUrlLoading 处理多类型
  • 5.2.1 WebView 独立进程解决方案
  • 5.2.2 截取 WebView 屏幕的整个可视区域
  • 5.2.3 截取 WebView 屏幕长图效果
  • 更多 webView 优化内容

06.WebView 知识点

  • 01.常用的基础使用介绍
  • 02.Android 调用 Js 方式
  • 03.Js 调用 Android 方式
  • 04.清除缓存和缓存分析
  • 05.为什么 WebView 难搞
  • 06.如何处理加载错误
  • 07.触发加载网页的行为
  • 09.web 进度条避免多次加载
  • 10.多次获取 web 标题 title
  • 11.什么是 302/303 重定向
  • 12.301/302 业务场景白屏描述
  • 13.301/302 业务白屏解决方案
  • 14.301/302 回退栈问题描述
  • 15.301/302 回退栈问题解决方案
  • 16.如何设置 WebView 触摸点击事件
  • 17.如何用代码判断是否重定向
  • 18.如何解决重定向回退栈问题
  • 19.shouldOverrideUrlLoading
  • 21.loadUrl(url)流程分析
  • 22.js 的调用时机分析
  • 23.如何使用 DeepLink
  • 24.应用被作为三方浏览器打开
  • 25.理解 WebView 独立进程
  • 26.使用外部浏览器下载
  • 27.tel,sms 等协议用法
  • 29.关于拦截处理注意要点
  • 30.FileChooser 文件处理
  • 41.管理 Cookies 分析说明
  • 41.管理 Cookies 分析说明
  • 42.WebView 中长按处理逻辑
  • 43.8.0 关于 WebView 新特性
  • 44.H5 页面为何加载速度慢
  • 45.shouldOverrideUrlLoading 返回值
  • 46.webBackForwardList 用法
  • 47.WebView 多布局连贯滑动
  • 48.开启 Google 安全浏览服务
  • 49.shouldOverrideUrlLoading 不执行
  • 50.webView 使用上的建议
  • 51.关于图片显示隐藏设置
  • 51.关于图片显示隐藏设置
  • 更多内容看 wiki

07.WebView 缓存

  • 01.WebView 为何加载慢
  • 02.解决 WebView 加载慢
  • 03.浏览器缓存机制
  • 04.WebView 设置缓存
  • 05.具体缓存那些内容
  • 06.本地资源替换操作
  • 07.如何处理预加载数据
  • 更多内容查看 wiki

08.其他说明介绍

关于其他内容介绍

image

关于博客汇总链接

其他推荐

关于 LICENSE

Copyright 2017 yangchong211(github.com/yangchong211)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools