WebView使用

smartsean發表於2017-12-20

由於前段時間的專案對WebView的使用較多,因此總結一下專案中WebView的使用使用過程,以及一些值得注意的地方

WebView 在大部分的WebApp中使用相當廣泛,處理好WebView也是一個WebApp的關鍵

目前的WebView是基於webkit 核心瀏覽器並且封裝在android 的sdk 當中,並且WebView包括以下幾個功能

  1. 載入網站url和載入本地html頁面
  2. 可以與JavaScript程式碼進行互動
  3. 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);
        }
    }
});

複製程式碼

你可以通過以下方式關注我:

  1. CSDN
  2. 掘金
  3. 個人部落格
  4. Github

相關文章