Android中使用WebView遇到的問題總結:

1:直接在xml中給webview設置了背景圖片,背景圖片不生效的問題 解決方法:在xml中給webview設置背景圖片,而後在代碼中增長:webView.setBackgroundColor(0);web

2:點擊h5中的按鈕時,經過scheme跳轉到Android原生界面 a:具體的操做流程能夠參考我朋友的文章:blog.csdn.net/m0_37700275…bash

b:問題一:7.0/8.0手機h5端的scheme和我這邊的scheme徹底同樣,可是點擊按鈕不能跳轉成功 緣由:我在代碼中調用瞭如下代碼:ide

mWbAllFenqu.setWebViewClient(new WebViewClient()
        {
            @Override
            public void onPageFinished(WebView view, String url)
            {
                super.onPageFinished(view, url);
                LogUtils.i("onPageFinished");
                dialogDismiss();
            }
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon)
            {
                super.onPageStarted(view, url, favicon);
                LogUtils.i("onPageStarted");
                dialogShow();
            }
        });
複製代碼
解釋:咱們是徹底經過h5端控制跳轉的,也就是說在Android端是不寫跳轉事件的,因此我在setWebViewClient()
的時候,並無重寫shouldOverrideUrlLoading()方法,也沒有在shouldOverrideUrlLoading()方法中根據點擊
h5按鈕時的url進行頁面跳轉,而我之因此調用setWebViewClient()方法時想在h5頁面開始加載時彈出加載框,在h5頁面加載完成後加載框消失。
若是想要在setWebViewClient()中控制頁面跳轉,能夠這樣寫:
複製代碼
mWbAllFenqu.setWebViewClient(new WebViewClient()
        {
            @Override
            public void onPageFinished(WebView view, String url)
            {
                super.onPageFinished(view, url);
                LogUtils.i("onPageFinished");
                dialogDismiss();
            }
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon)
            {
                super.onPageStarted(view, url, favicon);
                LogUtils.i("onPageStarted");
                dialogShow();
            }
                    @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                LogUtils.i("shouldOverrideUrlLoading");
                LogUtils.i("request.toString():"+request.getUrl().toString());
                Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
                startActivity(intent);
                return true;
            }
        });
複製代碼
若是和我同樣,在Android端只定義scheme,由h5端徹底調用,而又想在頁面加載過程當中有加載框出現,頁面加載完成後
加載框消失,能夠不調用setWebViewClient()方法,改爲:
複製代碼
dialogShow();
        webView.loadUrl(url);
        mWbAllFenqu.setWebChromeClient(new WebChromeClient()
        {
            public void onProgressChanged(WebView view, int progress)
            {
                //當進度走到100的時候作本身的操做
                if(progress == 100){
                    dialogDismiss();
                }
            }
        });
複製代碼

c:問題二:代碼不走shouldOverrideUrlLoading()方法 在重寫shouldOverrideUrlLoading()方法時,我遇到了問題二,就是我點擊h5中的按鈕時並不走shouldOverrideUrlLoading()方法, 這讓我無比鬱悶,後來嘗試着把webView.loadUrl(url)放到setWebViewClient()方法的後面,居然神奇的成功了,可是有些其餘型號的手機 這樣作仍是不走shouldOverrideUrlLoading()方法ui

d:問題三:適配5.0/6.0手機 當我在公司的7.0/8.0手機上完成頁面顯示和頁面跳轉的功能後,我給本身的6.0手機裝了一個APK,發現6.0中h5頁面中的全部按鈕 都擠到了左上角,因而又給5.0手機裝了一個,也是同樣的問題,後來通過不斷調試,發現緣由是:ES6的版本太高,將ES6改爲ES5就沒問題了。url

e:問題四:5.0手機的頁面跳轉問題 當5.0/6.0手機的頁面沒問題以後,6.0能夠經過scheme由h5端跳轉到Android原生頁面, 可是5.0直接報錯:TOPICID://aa.diqu:8888/test處的網頁不能載入爲:net::ERR_UNKOWN_URL_SCHEMW, 因而改爲使用setWebViewClient(),重寫shouldOverrideUrlLoading()方法跳轉,發現5.0的手機不走shouldOverrideUrlLoading()方法, 因而改爲如下方法:spa

mWbAllFenqu.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onReceivedTitle(WebView view, String title) {
                LogUtils.i("onReceivedTitle");
                LogUtils.i("view.getUrl():"+view.getUrl());
                String url = view.getUrl();
                if (url.startsWith("topicid")) //只有是跳轉到地區界面的時候,才進行跳轉處理
                {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                }
            }
            public void onProgressChanged(WebView view, int progress)
            {
                //當進度走到100的時候作本身的操做
                if(progress == 100){
                    dialogDismiss();
                }
            }
        });
複製代碼

總結:若是使用scheme從h5端跳轉到Android原生界面,建議使用setWebChromeClient()方法,百分百沒問題.net

相關文章
相關標籤/搜索