新聞中心
AgentWeb 介紹

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的黎川網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
AgentWeb是一個(gè)高度封裝的 Android WebView ,簡(jiǎn)單易用 , 帶有進(jìn)度條 、 支持文件上傳 、 下載 、 簡(jiǎn)化 Javascript 通信 、 鏈?zhǔn)秸{(diào)用 、 加強(qiáng) Web 安全的庫(kù) 。讓你幾行代碼集成一個(gè)小型瀏覽器在你的應(yīng)用 。 App 下載體驗(yàn)
前言
WebView 可謂是每個(gè)應(yīng)用必備的一個(gè)控件了 ,但是談起它的使用 ,讓很多人都不是那么喜歡它 ,比如說(shuō)每個(gè) Web 頁(yè)面都需要各種一大推的 setting ,好一點(diǎn)的可能封裝成一個(gè) BaseWebActivity 和 BaseWebFragment ,但是重復(fù)的代碼總是讓有潔癖的程序員不舒服 ,而且 WebView 本身功能也不是很完善 , AgentWeb 就泥補(bǔ)了這些空缺 。
AgentWeb 功能
- 支持進(jìn)度條以及自定義進(jìn)度條
- 支持文件下載
- 支持文件下載斷點(diǎn)續(xù)傳
- 支持下載通知形式提示進(jìn)度
- 簡(jiǎn)化 Javascript 通信
- 支持 Android 4.4 Kitkat 以及其他版本文件上傳
- 支持注入 Cookies
- 加強(qiáng) Web 安全
- 兼容低版本安全 Js 通信
為什么要使用 AgentWeb ?
| Web | 文件下載 | 文件上傳 | Js 通信 | 斷點(diǎn)續(xù)傳 | 使用簡(jiǎn)易度 | 進(jìn)度條 | 線程安全 |
|---|---|---|---|---|---|---|---|
| WebView | 不支持 | 不支持 | 支持 | 不支持 | 麻煩 | 沒(méi)有 | 不安全 |
| AgentWeb | 支持 | 支持 | 更簡(jiǎn)潔 | 支持 | 簡(jiǎn)潔 | 有 | 安全 |
簡(jiǎn)潔易用
為什么說(shuō)它簡(jiǎn)潔易用嗎 ? 下面京東效果圖 , 只需一句話 !
- mAgentWeb = AgentWeb.with(this)//傳入Activity
- .setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//傳入AgentWeb 的父控件 ,如果父控件為 RelativeLayout , 那么第二參數(shù)需要傳入 RelativeLayout.LayoutParams
- .useDefaultIndicator()// 使用默認(rèn)進(jìn)度條
- .defaultProgressBarColor() // 使用默認(rèn)進(jìn)度條顏色
- .setReceivedTitleCallback(mCallback) //設(shè)置 Web 頁(yè)面的 title 回調(diào)
- .createAgentWeb()//
- .ready()
- .go("http://www.jd.com");
你沒(méi)看錯(cuò) ,里面沒(méi)有一句 Setting , 甚至連 WebChromeClient 都不配置就有進(jìn)度條 。
Javascript 通信拼接太麻煩 ? 請(qǐng)看 。
- //Javascript 方法
- function callByAndroid(){
- console.log("callByAndroid")
- }
Android 端
- mAgentWeb.getJsEntraceAccess().quickCallJs("callByAndroid");
結(jié)果
- consoleMessage:callByAndroid lineNumber:27
效果圖
到了這里 , 弱弱問(wèn)一句 , 你還有什么理由不使用 AgentWeb ?
淺談進(jìn)度條
為什么要談一下進(jìn)度條這個(gè)東西呢 ? 因?yàn)闆](méi)有進(jìn)度條的 WebView 頁(yè)面體驗(yàn)實(shí)在太差了 ,AgentWeb 默認(rèn)的進(jìn)度條是一般瀏覽器的進(jìn)度條 ,為什么采用這種進(jìn)度條呢 ? 因?yàn)轶w驗(yàn)好 ,微信和QQ ,支付寶 、 UC 以及 Safari 都采用這種進(jìn)度條是有他們道理的 , 我還見(jiàn)過(guò)應(yīng)用加載 Web 頁(yè)面的時(shí)候直接彈 Dialog 不可取消 ,沒(méi)有非常必要讓用戶確定情況都別彈 Dialog ,特別在用戶網(wǎng)絡(luò)不好的情況下 ,加載速度變得突奇的慢 ,那么 Dialog 就一直存在 ,用戶耐性不好 ,只能把你進(jìn)程殺死 。
Agentweb 視圖結(jié)構(gòu)
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- android:layout_width="match_parent"
- android:layout_height="2dp"
- >
AgentWeb 最外層是 FrameLayout , 所以在使用 AgentWeb 的時(shí)候還需要給 FrameLayout 指定父控件(下面有使用方式) 。
AgentWeb 內(nèi)部結(jié)構(gòu)
- IndicatorController 進(jìn)度條控制器
- WebCreator 創(chuàng)建 WebView 。
- WebSettings 統(tǒng)一設(shè)置 WebView 的 settings
- WebSecurityController 安全控制器
- JsEntraceAccess Js 方法入口
引入
Gradle
- compile 'com.just.agentweb:agentweb:1.1.0'
Maven
com.just.agentweb agentweb 1.1.0 pom
用法
Activity 使用如下
- mAgentWeb = AgentWeb.with(this)//傳入Activity
- .setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//傳入AgentWeb 的父控件 ,如果父控件為 RelativeLayout , 那么第二參數(shù)需要傳入 RelativeLayout.LayoutParams
- .useDefaultIndicator()// 使用默認(rèn)進(jìn)度條
- .defaultProgressBarColor() // 使用默認(rèn)進(jìn)度條顏色
- .setReceivedTitleCallback(mCallback) //設(shè)置 Web 頁(yè)面的 title 回調(diào)
- .createAgentWeb()//
- .ready()
- .go("http://www.jd.com");
Fragment 使用如下
- @Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- mAgentWeb = AgentWeb.with(this)//這里需要把 Fragment 傳入
- .setAgentWebParent((ViewGroup) view, new LinearLayout.LayoutParams(-1, -1))// 設(shè)置 AgentWeb 的父控件 , 這里的view 是 LinearLayout , 那么需要傳入 LinearLayout.LayoutParams
- .useDefaultIndicator()// 使用默認(rèn)進(jìn)度條
- .setReceivedTitleCallback(mCallback) //標(biāo)題回調(diào)
- .setSecurityType(AgentWeb.SecurityType.strict) //注意這里開(kāi)啟 strict 模式 , 設(shè)備低于 4.2 情況下回把注入的 Js 全部清空掉 , 這里推薦使用 onJsPrompt 通信
- .createAgentWeb()//
- .ready()//
- .go(getUrl());
- }
混淆
保持 WebChromeClient 子類(lèi)不被混淆
- -keep public class * extends android.webkit.WebChromeClient{
- *;
- }
Java 注入類(lèi)不要混淆 , 例如 App 里面的 HelloJs 對(duì)象 , 需要 Keep 。
- -keepclassmembers class com.just.library.agentweb.HelloJs{ *; }
致謝
- 360 大牛 SafeWebView
- WebView 參考文獻(xiàn)
總結(jié)
AgentWeb 是一個(gè)把 WebView 完全代理出來(lái) , 脫離 Activity 、 Fragment xml 布局 , 獨(dú)立的 Android Web 庫(kù) 。***如果該庫(kù)對(duì)你有幫助不妨對(duì)右上角點(diǎn)點(diǎn) Star 對(duì)我支持 , 感謝萬(wàn)分 ! 當(dāng)然我更喜歡你 Fork PR 成為項(xiàng)目貢獻(xiàn)者 . AgentWeb
文章標(biāo)題:AgentWeb是基于Android WebView一個(gè)功能完善小型瀏覽器庫(kù)
分享URL:http://fisionsoft.com.cn/article/djooijj.html


咨詢
建站咨詢
