項目地址:https://github.com/Callanna/CustomView
自定義CWebView 的封裝
- 支持WebView緩存
- 支持JavaScript
- 支持手機點擊返回鍵返回
- 監(jiān)聽網(wǎng)頁加載進度
- 監(jiān)聽wifi網(wǎng)絡狀態(tài)變化自動刷新
- 網(wǎng)絡狀況不佳向拆,網(wǎng)絡加載錯誤頁面提示等功能
- 重寫destory,清除緩存毕籽,清除歷史瘪弓,移除父容器的子控件
- 獲得當前網(wǎng)頁標題
ProgressWebView
- 顯示當前加載進度
PullRefreshWebView
- 支持下拉刷新
- 注入網(wǎng)絡加載失敗后'其設置網(wǎng)絡'JS接口
Usage
You can create your own progress wheel in xml like this (remeber to add xmlns:wheel="http://schemas.android.com/apk/res-auto"
):
<com.cvlib.web.CWebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</com.cvlib.web.CWebView>
in code:
fWebView = (CWebView) mView.findViewById(R.id.webView);
//監(jiān)聽網(wǎng)頁加載進度
fWebView.addLoadingStateListener(new CWebView.ILoadingStateListener() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
//TODO
}
@Override
public void onPageFinished(WebView view, String url) {
//TODO
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
//TODO
}
});
監(jiān)聽wifi網(wǎng)絡狀態(tài)變化自動刷新
demo1
fWebView.setAutoLoadOnNetStateChanged(true);
獲得當前加載網(wǎng)頁title
fWebView.getCurrentTitle();
重寫destroy 避免直接調(diào)用丙躏,如果不移除父容器中的其他控件,會出現(xiàn)異常
fWebView.destroy();
支持返回按鍵返回
![demo4](https://raw.githubusercontent.com/Callanna/CustomView/master/art/demo4.gif)
demo4
加載網(wǎng)頁出現(xiàn)未知錯誤
![demo2](https://raw.githubusercontent.com/Callanna/CustomView/master/art/demo2.gif)
demo2
-
ProgressWebView
帶有進度條的WebView
demo3 -
PullRefreshWebView
封裝了一下SwipeRefreshLayout,支持下拉刷新滑沧。
fWebView = (PullRefreshWebView) view.findViewById(R.id.webview_recipe);
//沒有連接網(wǎng)絡俩滥,點擊默認錯誤界面的去設置網(wǎng)絡的回調(diào)接口
fWebView.initJsClass(new JsClass.IOpenWifiSettingListener() {
@Override
public void openWifiSetting() {
NetUtils.openSetting(getActivity());
}
});
WebView 其他用法以及注意事項
- 支持播放的插件
fWebView.getfWebView().getSettings().setPluginState(WebSettings.PluginState.ON);
- 播放網(wǎng)頁視頻后,返回或退出時,要清除數(shù)據(jù)芋类,以免出現(xiàn)背后聲音依舊在播放的問題
fWebView.cleanCache(true)
- 需要設置PC的UserAgent
fWebView.getfWebView().getSettings().setUserAgentString("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36");
-
如果支持JS,判斷一下系統(tǒng)版本是否在4.2一下
系統(tǒng)版本在4.2一下隆嗅, 有WebView因addJavaScriptInterface()引起的安全問題
這個問題主要是因為會有惡意的js代碼注入,尤其是在已經(jīng)獲取root權限的手機上,
一些惡意程序可能會利用該漏洞安裝或者卸載應用.關于詳細的情況可以參考下面這篇文章: