AgentWeb 介紹
AgentWeb 是一個高度封裝的 Android WebView ,簡單易用 股冗, 帶有進度條 霹陡、 支持文件上傳 、 下載 、 簡化 Javascript 通信 烹棉,加強 Web 安全的庫 攒霹。 App 下載體驗
前言
WebView 可謂是每個應(yīng)用必備的一個控件了 ,但是談起它的使用 浆洗,讓很多人都不是那么喜歡它 催束,比如說每個 Web 頁面都需要各種一大推的 setting ,好一點的可能封裝成一個 BaseWebActivity 和 BaseWebFragment 伏社,但是重復(fù)的代碼總是讓有潔癖的程序員不舒服 抠刺,而且 WebView 本身功能也不是很完善 , AgentWeb 就泥補了這些空缺 摘昌。
AgentWeb 功能
- 支持進度條以及自定義進度條
- 支持文件下載
- 支持文件斷點續(xù)傳
- 支持下載通知形式提示進度
- 簡化 Javascript 通信
- 支持返回事件處理
- 支持注入 Cookies
- WebView 安全
為什么要使用 AgentWeb 矫付?
七個字 ,簡潔易用體驗好 第焰。 最重要的是 WebView 很多東西不支持呀 买优, 坑太多!
Web | 文件下載 | 文件上傳 | Js通信 | 斷點續(xù)傳 | 使用簡易度 | 進度條 | 線程安全 |
---|---|---|---|---|---|---|---|
WebView | 不支持 | 不支持 | 支持 | 不支持 | 麻煩 | 沒有 | 不安全 |
AgentWeb | 支持 | 支持 | 更簡潔 | 支持 | 簡潔 | 有 | 安全 |
簡潔易用
為什么說它簡潔易用嗎 挺举? 下面京東商城效果圖 杀赢, 只需一句話 !
mAgentWeb = AgentWeb.with(this)//傳入Activity
.setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//傳入AgentWeb 的父控件 湘纵,如果父控件為 RelativeLayout 脂崔, 那么第二參數(shù)需要傳入 RelativeLayout.LayoutParams
.useDefaultIndicator()// 使用默認進度條
.defaultProgressBarColor() // 使用默認進度條顏色
.setReceivedTitleCallback(mCallback) //設(shè)置 Web 頁面的 title 回調(diào)
.createAgentWeb()//
.ready()
.go("http://www.jd.com");
你沒看錯 ,里面沒有一句 Setting 梧喷, 甚至連 WebChromeClient 都不配置就有進度條 砌左。
Javascript 通信拼接太麻煩 ? 請看 铺敌。
//Javascript 方法
function callByAndroid(){
console.log("callByAndroid")
}
Android 端
mAgentWeb.getJsEntraceAccess().quickCallJs("callByAndroid");
結(jié)果
05-27 08:27:04.945 469-469/com.just.library.agentweb:web I/Info: consoleMessage:callByAndroid lineNumber:27
京東商城效果圖
到了這里 汇歹, 弱弱問一句 , 你還有什么理由不使用 AgentWeb 偿凭?
淺談進度條
為什么要談一下進度條這個東西呢 ? 因為沒有進度條的 WebView 頁面體驗實在太差了 产弹,AgentWeb 默認的進度條是一般瀏覽器的進度條 ,為什么采用這種進度條呢 ? 因為體驗好 弯囊,微信和QQ 痰哨,支付寶 、 UC 以及 Safari 都采用這種進度條是有他們道理的 , 我還見過應(yīng)用加載 Web 頁面的時候直接彈 Dialog 不可取消 匾嘱,這種惡心的做法 斤斧,沒有非常必要讓用戶確定情況都別彈 Dialog ,特別在用戶網(wǎng)絡(luò)不好的情況下 霎烙,加載速度變得突奇的慢 撬讽,那么 Dialog 就一直存在 蕊连,用戶耐性不好 ,只能把你進程殺死 锐秦。
Agentweb 視圖結(jié)構(gòu)
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
<!--進度條-->
<com.just.library.BaseIndicatorView
android:layout_width="match_parent"
android:layout_height="2dp"
>
</com.just.library.BaseIndicatorView>
</FrameLayout>
很清晰 AgentWeb 最外層是 FrameLayout , 所以在使用 AgentWeb 的時候還需要給 FrameLayout 指定父控件(下面有使用方式) 盗忱。
引入
-
Gradle
compile 'com.just.agentweb:agentweb:1.0.3'
-
Maven
<dependency> <groupId>com.just.agentweb</groupId> <artifactId>agentweb</artifactId> <version>1.0.3</version> <type>pom</type> </dependency>
用法
Activity 使用如下
mAgentWeb = AgentWeb.with(this)//傳入Activity
.setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//傳入AgentWeb 的父控件 酱床,如果父控件為 RelativeLayout , 那么第二參數(shù)需要傳入 RelativeLayout.LayoutParams
.useDefaultIndicator()// 使用默認進度條
.defaultProgressBarColor() // 使用默認進度條顏色
.setReceivedTitleCallback(mCallback) //設(shè)置 Web 頁面的 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.getActivity(), this)//這里需要把 Activity 趟佃、 和 Fragment 同時傳入
.setAgentWebParent((ViewGroup) view, new LinearLayout.LayoutParams(-1, -1))// 設(shè)置 AgentWeb 的父控件 扇谣, 這里的view 是 LinearLayout , 那么需要傳入 LinearLayout.LayoutParams
.useDefaultIndicator()// 使用默認進度條
.setReceivedTitleCallback(mCallback) //標題回調(diào)
.setSecurityType(AgentWeb.SecurityType.strict) //注意這里開啟 strict 模式 闲昭, 設(shè)備低于 4.2 情況下回把注入的 Js 全部清空掉 罐寨, 這里推薦使用 onJsPrompt 通信
.createAgentWeb()//
.ready()//
.go(getUrl());
}
混淆
-keep public class * extends android.webkit.WebChromeClient
總結(jié)
AgentWeb 是一個把 WebView 完全代理出來 , 脫離 Activity 序矩、 Fragment xml 布局 鸯绿, Android Web 庫 。