android webView 加載webapp 一些問題與技巧

十一長假過來基本處於沒啥事做的情況,所以沒有做一些實際的開發,自己最近也在研究java的後臺,自己寫了一些簡單的接口。好了,廢話不多說。切入正題:
公司最近有個項目是web應用,需要發佈安卓和ios兩個平臺的應用。所以我們安卓的任務量還是很輕的,主要是通過webview加載網頁的url,安卓端需要做一些底層的東西。比如導航,視屏播放,還有第三方分享。
其中webview和js交互可以通過自定義接口和攔截url來實現,具體可以看我的上一篇博客:這裏寫鏈接內容
但是我在此過程中遇到了一個很奇怪的問題,就是webapp中有一個跳轉url ,跳轉之後發現 html中的一些樣式沒有了,並且某些點擊事件也沒法觸發了。很奇怪,但是這個webapp在網頁端打開和在ios上這些樣式顯示正常,跳轉也是正常。所以我懷疑是安卓端的webview的一些配置問題。找了很久發現加上這句就可以了。

//獲取webview的配置
 WebSettings settings = mWebView.getSettings();
 //配置支持domstorage
settings.setDomStorageEnabled(true);

但這個配置具體有什麼用了?我們可以看一下源碼:

 /**
     * Sets whether the DOM storage API is enabled. The default value is false.
     *
     * @param flag true if the WebView should use the DOM storage API
     */
    public synchronized void setDomStorageEnabled(boolean flag) {
        throw new MustOverrideException();
    }

看了一些感覺像是支持dom 的這個具體我也不清楚,網上搜了也沒說這個是幹啥的。但是就是能解決問題。所以很奇怪。記錄一下,防止以後入坑。
我們平時webView 加載失敗,比如網絡不行了。但是這個時候加載的是默認的頁面比較醜。我們可以自己寫一個。只要重寫onReceivedError()方法就可以了。

webview.setWebViewClient(new MonitorWebClient());

//繼承WebViewClient 重寫方法
public class MonitorWebClient extends WebViewClient {

        @Override
        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {
            // 錯誤<strong>處理</strong>
            try {
                webview.stopLoading();
            } catch (Exception e) {
            }
            try {
                webview.clearView();
            } catch (Exception e) {
            }
            if (webview.canGoBack()) {
                webview.goBack();
            }
        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler,
                SslError error) {
            // 忽略證書的錯誤繼續Load頁面內容
            handler.proceed();
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            }

        }

我們webapp沒法監聽我們手機的返回鍵,所以我們得重寫方法:這樣就能實現按下返回鍵返回到上個頁面


    @Override
    public void onBackPressed() {
    //是否能返回
        if(webview.canGoBack()){
            webview.goBack();
            return;
        }else{
            finish();
        }
        super.onBackPressed();
    }

好了,webview的基本用法已經差不多了。以後有其他新的問題我再補充吧。

發佈了34 篇原創文章 · 獲贊 88 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章