AgentWeb是基于Android WebView一个功能完善小型浏览器库

简介:
本文讲的是 AgentWeb是基于Android WebView一个功能完善小型浏览器库, AgentWeb是一个高度封装的 Android WebView ,简单易用 , 带有进度条 、 支持文件上传 、 下载 、 简化 Javascript 通信 、 链式调用 、 加强 Web 安全的库 。让你几行代码集成一个小型浏览器在你的应用 。 App 下载体验

前言

WebView 可谓是每个应用必备的一个控件了 ,但是谈起它的使用 ,让很多人都不是那么喜欢它 ,比如说每个 Web 页面都需要各种一大推的 setting ,好一点的可能封装成一个 BaseWebActivity 和 BaseWebFragment ,但是重复的代码总是让有洁癖的程序员不舒服 ,而且 WebView 本身功能也不是很完善 , AgentWeb 就泥补了这些空缺 。

AgentWeb 功能

  1. 支持进度条以及自定义进度条
  2. 支持文件下载
  3. 支持文件下载断点续传
  4. 支持下载通知形式提示进度
  5. 简化 Javascript 通信
  6. 支持 Android 4.4 Kitkat 以及其他版本文件上传
  7. 支持注入 Cookies
  8. 加强 Web 安全
  9. 兼容低版本安全 Js 通信

为什么要使用 AgentWeb ?

Web 文件下载 文件上传 Js 通信 断点续传 使用简易度 进度条 线程安全
WebView 不支持 不支持 支持 不支持 麻烦 没有 不安全
AgentWeb 支持 支持 更简洁 支持 简洁 安全

简洁易用

为什么说它简洁易用吗 ? 下面京东效果图 , 只需一句话 !

 
 
  1. mAgentWeb = AgentWeb.with(this)//传入Activity 
  2.                 .setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//传入AgentWeb 的父控件 ,如果父控件为 RelativeLayout , 那么第二参数需要传入 RelativeLayout.LayoutParams 
  3.                 .useDefaultIndicator()// 使用默认进度条 
  4.                 .defaultProgressBarColor() // 使用默认进度条颜色 
  5.                 .setReceivedTitleCallback(mCallback) //设置 Web 页面的 title 回调 
  6.                 .createAgentWeb()// 
  7.                 .ready() 
  8.                 .go("http://www.jd.com"); 

你没看错 ,里面没有一句 Setting , 甚至连 WebChromeClient 都不配置就有进度条 。

Javascript 通信拼接太麻烦 ? 请看 。

 
 
  1. //Javascript 方法 
  2. function callByAndroid(){ 
  3.       console.log("callByAndroid"
  4.   }  

Android 端

 
 
  1. mAgentWeb.getJsEntraceAccess().quickCallJs("callByAndroid"); 

结果

 
 
  1. consoleMessage:callByAndroid  lineNumber:27 

效果图

到了这里 , 弱弱问一句 , 你还有什么理由不使用 AgentWeb ?

浅谈进度条

为什么要谈一下进度条这个东西呢 ? 因为没有进度条的 WebView 页面体验实在太差了 ,AgentWeb 默认的进度条是一般浏览器的进度条 ,为什么采用这种进度条呢 ? 因为体验好 ,微信和QQ ,支付宝 、 UC 以及 Safari 都采用这种进度条是有他们道理的 , 我还见过应用加载 Web 页面的时候直接弹 Dialog 不可取消 ,没有非常必要让用户确定情况都别弹 Dialog ,特别在用户网络不好的情况下 ,加载速度变得突奇的慢 ,那么 Dialog 就一直存在 ,用户耐性不好 ,只能把你进程杀死 。

Agentweb 视图结构

 
 
  1. <FrameLayout 
  2.         android:layout_width="match_parent" 
  3.         android:layout_height="match_parent"
  4.  
  5.         <WebView 
  6.             android:layout_width="match_parent" 
  7.             android:layout_height="match_parent"
  8.  
  9.         </WebView> 
  10.          <!--进度条--> 
  11.         <com.just.library.BaseIndicatorView 
  12.             android:layout_width="match_parent" 
  13.             android:layout_height="2dp" 
  14.             > 
  15.  
  16.         </com.just.library.BaseIndicatorView> 
  17.     </FrameLayout>  

AgentWeb 最外层是 FrameLayout , 所以在使用 AgentWeb 的时候还需要给 FrameLayout 指定父控件(下面有使用方式) 。

AgentWeb 内部结构

  • IndicatorController 进度条控制器
  • WebCreator 创建 WebView 。
  • WebSettings 统一设置 WebView 的 settings
  • WebSecurityController 安全控制器
  • JsEntraceAccess Js 方法入口

引入

Gradle

 
 
  1. compile 'com.just.agentweb:agentweb:1.1.0' 

Maven

 
 
  1. <dependency> 
  2.    <groupId>com.just.agentweb</groupId> 
  3.    <artifactId>agentweb</artifactId> 
  4.    <version>1.1.0</version> 
  5.    <type>pom</type> 
  6.  </dependency>  

用法

Activity 使用如下

 
 
  1. mAgentWeb = AgentWeb.with(this)//传入Activity 
  2.                 .setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//传入AgentWeb 的父控件 ,如果父控件为 RelativeLayout , 那么第二参数需要传入 RelativeLayout.LayoutParams 
  3.                 .useDefaultIndicator()// 使用默认进度条 
  4.                 .defaultProgressBarColor() // 使用默认进度条颜色 
  5.                 .setReceivedTitleCallback(mCallback) //设置 Web 页面的 title 回调 
  6.                 .createAgentWeb()// 
  7.                 .ready() 
  8.                 .go("http://www.jd.com"); 

Fragment 使用如下

 
 
  1. @Override 
  2.     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
  3.         super.onViewCreated(view, savedInstanceState); 
  4.         mAgentWeb = AgentWeb.with(this)//这里需要把 Fragment  传入 
  5.                 .setAgentWebParent((ViewGroup) view, new LinearLayout.LayoutParams(-1, -1))// 设置 AgentWeb 的父控件 , 这里的view 是 LinearLayout , 那么需要传入 LinearLayout.LayoutParams 
  6.                 .useDefaultIndicator()// 使用默认进度条 
  7.                 .setReceivedTitleCallback(mCallback) //标题回调 
  8.                 .setSecurityType(AgentWeb.SecurityType.strict) //注意这里开启 strict 模式 , 设备低于 4.2 情况下回把注入的 Js 全部清空掉 , 这里推荐使用 onJsPrompt 通信 
  9.                 .createAgentWeb()// 
  10.                 .ready()// 
  11.                 .go(getUrl()); 
  12.  
  13.     } 

混淆

保持 WebChromeClient 子类不被混淆

 
 
  1. -keep public class * extends android.webkit.WebChromeClient{ 
  2.  
  3. *; 
  4.  
  5.  

Java 注入类不要混淆 , 例如 App 里面的 HelloJs 对象 , 需要 Keep 。

 
 
  1. -keepclassmembers class com.just.library.agentweb.HelloJs{ *; } 

致谢

  • 360 大牛 SafeWebView
  • WebView 参考文献

总结

AgentWeb 是一个把 WebView 完全代理出来 , 脱离 Activity 、 Fragment xml 布局 , 独立的 Android Web 库 。最后如果该库对你有帮助不妨对右上角点点 Star 对我支持 , 感谢万分 ! 当然我更喜欢你 Fork PR 成为项目贡献者 . AgentWeb


本文作者:佚名

来源:51CTO

原文标题:AgentWeb是基于Android WebView一个功能完善小型浏览器库
目录
打赏
0
0
0
0
325
分享
相关文章
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
55 15
一些处理浏览器兼容性问题的JavaScript库
这些库在处理浏览器兼容性问题方面都有着各自的特点和优势,可以根据具体的需求和项目情况选择合适的库来使用,从而提高代码的兼容性和稳定性,为用户提供更好的体验。同时,随着浏览器技术的不断发展,还需要持续关注和学习新的兼容性解决方案。
229 58
|
5月前
|
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
162 57
Browser Use:开源 AI 浏览器助手,自动完成网页交互任务,支持多标签页管理、视觉识别和内容提取等功能
Browser Use 是一款专为大语言模型设计的智能浏览器工具,支持多标签页管理、视觉识别、内容提取等功能,并能记录和重复执行特定动作,适用于多种应用场景。
1590 0
Browser Use:开源 AI 浏览器助手,自动完成网页交互任务,支持多标签页管理、视觉识别和内容提取等功能
|
6月前
|
Android开发表情emoji功能开发
本文介绍了一种在Android应用中实现emoji表情功能的方法,通过将图片与表情字符对应,实现在`TextView`中的正常显示。示例代码展示了如何使用自定义适配器加载emoji表情,并在编辑框中输入或删除表情。项目包含完整的源码结构,可作为开发参考。视频演示和源码详情见文章内链接。
138 4
Android开发表情emoji功能开发
Android vs iOS:探索移动操作系统的设计与功能差异###
【10月更文挑战第20天】 本文深入分析了Android和iOS两个主流移动操作系统在设计哲学、用户体验、技术架构等方面的显著差异。通过对比,揭示了这两种系统各自的独特优势与局限性,并探讨了它们如何塑造了我们的数字生活方式。无论你是开发者还是普通用户,理解这些差异都有助于更好地选择和使用你的移动设备。 ###
123 3
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
89 2
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
本文详细介绍了如何利用CameraX库实现高质量的照片及视频拍摄功能,包括添加依赖、初始化、权限请求、配置预览与捕获等关键步骤。此外,还特别针对不同分辨率和帧率的视频拍摄提供了性能优化策略,确保应用既高效又稳定。
721 1
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
Android平台无纸化同屏如何实现实时录像功能
Android平台无纸化同屏,如果需要本地录像的话,实现难度不大,只要复用之前开发的录像模块的就可以,对我们来说,同屏采集这块,只是数据源不同而已,如果是自采集的其他数据,我们一样可以编码录像。
纯Vue实现网页日常任务清单小功能(数据存储在浏览器)
这篇文章介绍了如何使用纯Vue实现一个网页日常任务清单的小功能,数据存储在浏览器中以保持数据持久化。文章内容包括功能描述、效果演示、核心代码修改方法,以及已经打包好的项目源码下载链接。作者还提供了友情提示,指出了数据存储到浏览器的核心代码部分,方便读者快速理解和应用。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等