自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

AgentWeb是基于Android WebView一個功能完善小型瀏覽器庫

移動開發(fā) Android
AgentWeb是一個高度封裝的 Android WebView ,簡單易用 , 帶有進度條 、 支持文件上傳 、 下載 、 簡化 Javascript 通信 、 鏈?zhǔn)秸{(diào)用 、 加強 Web 安全的庫 。讓你幾行代碼集成一個小型瀏覽器在你的應(yīng)用 。

AgentWeb是基于Android WebView一個功能完善小型瀏覽器庫

AgentWeb 介紹

AgentWeb是一個高度封裝的 Android WebView ,簡單易用 , 帶有進度條 、 支持文件上傳 、 下載 、 簡化 Javascript 通信 、 鏈?zhǔn)秸{(diào)用 、 加強 Web 安全的庫 。讓你幾行代碼集成一個小型瀏覽器在你的應(yīng)用 。 App 下載體驗

前言

WebView 可謂是每個應(yīng)用必備的一個控件了 ,但是談起它的使用 ,讓很多人都不是那么喜歡它 ,比如說每個 Web 頁面都需要各種一大推的 setting ,好一點的可能封裝成一個 BaseWebActivity 和 BaseWebFragment ,但是重復(fù)的代碼總是讓有潔癖的程序員不舒服 ,而且 WebView 本身功能也不是很完善 , AgentWeb 就泥補了這些空缺 。

AgentWeb 功能

  1. 支持進度條以及自定義進度條
  2. 支持文件下載
  3. 支持文件下載斷點續(xù)傳
  4. 支持下載通知形式提示進度
  5. 簡化 Javascript 通信
  6. 支持 Android 4.4 Kitkat 以及其他版本文件上傳
  7. 支持注入 Cookies
  8. 加強 Web 安全
  9. 兼容低版本安全 Js 通信

為什么要使用 AgentWeb ?

Web 文件下載 文件上傳 Js 通信 斷點續(xù)傳 使用簡易度 進度條 線程安全
WebView 不支持 不支持 支持 不支持 麻煩 沒有 不安全
AgentWeb 支持 支持 更簡潔 支持 簡潔 安全

簡潔易用

為什么說它簡潔易用嗎 ? 下面京東效果圖 , 只需一句話 !

  1. mAgentWeb = AgentWeb.with(this)//傳入Activity 
  2.                 .setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//傳入AgentWeb 的父控件 ,如果父控件為 RelativeLayout , 那么第二參數(shù)需要傳入 RelativeLayout.LayoutParams 
  3.                 .useDefaultIndicator()// 使用默認(rèn)進度條 
  4.                 .defaultProgressBarColor() // 使用默認(rèn)進度條顏色 
  5.                 .setReceivedTitleCallback(mCallback) //設(shè)置 Web 頁面的 title 回調(diào) 
  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"); 

結(jié)果

  1. consoleMessage:callByAndroid  lineNumber:27 

效果圖 

 

到了這里 , 弱弱問一句 , 你還有什么理由不使用 AgentWeb ?

淺談進度條

為什么要談一下進度條這個東西呢 ? 因為沒有進度條的 WebView 頁面體驗實在太差了 ,AgentWeb 默認(rèn)的進度條是一般瀏覽器的進度條 ,為什么采用這種進度條呢 ? 因為體驗好 ,微信和QQ ,支付寶 、 UC 以及 Safari 都采用這種進度條是有他們道理的 , 我還見過應(yīng)用加載 Web 頁面的時候直接彈 Dialog 不可取消 ,沒有非常必要讓用戶確定情況都別彈 Dialog ,特別在用戶網(wǎng)絡(luò)不好的情況下 ,加載速度變得突奇的慢 ,那么 Dialog 就一直存在 ,用戶耐性不好 ,只能把你進程殺死 。

Agentweb 視圖結(jié)構(gòu)

  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 內(nèi)部結(jié)構(gòu)

 

  • IndicatorController 進度條控制器
  • WebCreator 創(chuàng)建 WebView 。
  • WebSettings 統(tǒng)一設(shè)置 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 , 那么第二參數(shù)需要傳入 RelativeLayout.LayoutParams 
  3.                 .useDefaultIndicator()// 使用默認(rèn)進度條 
  4.                 .defaultProgressBarColor() // 使用默認(rèn)進度條顏色 
  5.                 .setReceivedTitleCallback(mCallback) //設(shè)置 Web 頁面的 title 回調(diào) 
  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))// 設(shè)置 AgentWeb 的父控件 , 這里的view 是 LinearLayout , 那么需要傳入 LinearLayout.LayoutParams 
  6.                 .useDefaultIndicator()// 使用默認(rèn)進度條 
  7.                 .setReceivedTitleCallback(mCallback) //標(biāo)題回調(diào) 
  8.                 .setSecurityType(AgentWeb.SecurityType.strict) //注意這里開啟 strict 模式 , 設(shè)備低于 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 參考文獻(xiàn)

總結(jié)

AgentWeb 是一個把 WebView 完全代理出來 , 脫離 Activity 、 Fragment xml 布局 , 獨立的 Android Web 庫 。***如果該庫對你有幫助不妨對右上角點點 Star 對我支持 , 感謝萬分 ! 當(dāng)然我更喜歡你 Fork PR 成為項目貢獻(xiàn)者 . AgentWeb 

責(zé)任編輯:龐桂玉 來源: Android開發(fā)中文站
相關(guān)推薦

2019-12-02 13:46:35

瀏覽器前端開發(fā)

2015-01-23 16:32:52

2009-05-27 08:54:15

瀏覽器平臺Chrome

2017-12-14 15:45:02

2012-09-03 10:24:16

果粉瀏覽器

2023-12-21 11:12:31

Node.js.NET開源庫

2014-08-18 14:58:25

微軟IE

2022-06-13 06:33:04

瀏覽器瀏覽器插件

2013-04-22 09:52:04

.netchrome核心開發(fā)chrome

2021-08-06 16:52:10

瀏覽器HTTPS通信

2011-04-14 15:55:35

WPF.NET

2022-06-20 09:01:56

Plasmo開源

2012-04-25 14:06:45

HTML5

2021-06-02 06:14:50

Nyxt瀏覽器

2012-10-11 15:06:55

2009-03-23 08:52:51

2021-10-08 08:20:06

LinuxChromium瀏覽器

2013-06-14 17:16:44

WP開發(fā)Windows PhoWP應(yīng)用

2010-01-08 12:14:44

ibmdwAndroid

2020-07-06 08:23:11

開源瀏覽器操作系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號