由於前段時間的專案對WebView的使用較多,因此總結一下專案中WebView的使用使用過程,以及一些值得注意的地方
WebView 在大部分的WebApp中使用相當廣泛,處理好WebView也是一個WebApp的關鍵
目前的WebView是基於webkit 核心瀏覽器並且封裝在android 的sdk 當中,並且WebView包括以下幾個功能
- 載入網站url和載入本地html頁面
- 可以與JavaScript程式碼進行互動
- webview控制元件可以高度進行定製
在WebView使用過程中應當注意一下幾點:
在AndroidManifest.xml 中新增網路訪問許可權
<uses-permission android:name="android.permission.INTERNET" />
在WebView中有一個輔助類WebSettings,通過他管理WebView的一些狀態以及外掛
// webview啟用javascript支援 用於訪問頁面中的javascript
webSettings.setJavaScriptEnabled(true);
複製程式碼
//設定WebView快取模式 預設斷網情況下不快取
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
複製程式碼
//斷網情況下載入本地快取
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);}
複製程式碼
//讓WebView支援DOM storage API
webSettings.setDomStorageEnabled(true);
複製程式碼
//讓WebView支援縮放
webSettings.setSupportZoom(true);
複製程式碼
//啟用WebView內建縮放功能
webSettings.setBuiltInZoomControls(true);
複製程式碼
//讓WebView支援可任意比例縮放
webSettings.setUseWideViewPort(true);
複製程式碼
//讓WebView支援播放外掛
webSettings.setPluginState(WebSettings.PluginState.ON);
複製程式碼
//設定WebView使用內建縮放機制時,是否展現在螢幕縮放控制元件上
webSettings.setDisplayZoomControls(false);
複製程式碼
//設定在WebView內部是否允許訪問檔案
webSettings.setAllowFileAccess(true);
複製程式碼
//設定WebView的訪問UserAgent
webSettings.setUserAgentString(WebViewUtil.getUserAgent(getActivity(), webSettings));
複製程式碼
//設定指令碼是否允許自動開啟彈窗
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
複製程式碼
// 加快HTML網頁載入完成速度
if (Build.VERSION.SDK_INT >= 19) {
settings.setLoadsImagesAutomatically(true);
} else {
settings.setLoadsImagesAutomatically(false);
}
複製程式碼
// 開啟Application H5 Caches 功能
settings.setAppCacheEnabled(true);
複製程式碼
// 設定編碼格式
settings.setDefaultTextEncodingName("utf-8");
複製程式碼
3.當頁面需要呼叫我們一些原生native的功能時候,可以通過我們自定義的JS介面去實現
//設定WebView JavaScript介面可以供頁面JS呼叫
mWebView.addJavascriptInterface(new JsInterface(), AppUtil.KEY_JS_INTERFACE_NAME);
複製程式碼
通過下面定義介面中的方法,如果涉及到一些ui介面上的處理和操作的話,需要在主執行緒中進行
//介面類
public class JsInterface {
public JsInterface() {
@JavascriptInterface
public void showToast(String msg, int delayType) {
Message message = new Message();
message.what = SHOW_TOAST;
message.arg1 = delayType;
message.obj = msg;mHandler.sendMessage(message);
}
}
}
複製程式碼
4.設定WebViewClient和WebChromeClient實現WebView更多功能
通過設定WebViewClient獲取頁面標題與頁面中連線跳轉的處理
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
//可以獲取到WebView的標題Title
setTitle(view.getTitle());
super.onPageFinished(view, url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//WebVeiw中連線跳轉進行處理跳轉到新的Activity
if (WebIntentUtil.isDetailsPage(url)) {
Intent intent = new Intent(EmbeddedBrowserActivity.this, DetailsActivity.class);
intent.putExtra(BbsServerUtil.KEY_URL, url);
startActivity(intent);
return true;
} else {
return super.shouldOverrideUrlLoading(view, url);
}
}
});
複製程式碼
你可以通過以下方式關注我: