我有一个应用程序有一些android 4.1/4.2用户报告webview没有呈现它的内容,但是它显示了源代码。
webview显示代码是相当标准的,而且对大多数用户来说都是正确的。

        webView.setVisibility(View.VISIBLE);
        webView.setVerticalFadingEdgeEnabled(false);
        webView.setFadingEdgeLength(0);
        webView.setFocusable(true);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                    case MotionEvent.ACTION_UP:
                        if (!view.hasFocus()) {
                            view.requestFocus();
                        }
                        break;
                }
                return false;
            }
        });

        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setGeolocationEnabled(true);
        settings.setLoadWithOverviewMode(true);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            settings.setAllowUniversalAccessFromFileURLs(true);
        }
        settings.setSupportZoom(true);

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.w("TEST", url);
                // The app does some other things here, but are unrelated to que question
                return true;
            }

        });

        webView.setWebChromeClient(new MyChromeClient());
        webView.loadDataWithBaseURL(Const.WEB_VIEW_BASE_URL, injectHtmlAndCss(guide.getContent()), "text/html; charset=UTF-8", null, null);
    }

这里有一个例子说明了其他人的遭遇:
我对此一无所知。

最佳答案

结果发现loadDataWithBaseUrl方法在Android4.1/4.2中不起作用。
我真的需要更改基本url,因为在我的html代码中,许多资产都被相对路由引用,所以我在<head>标记a<base>中注入了html。例子:

<html>
<head>
<base href="http://www.example.com/">
</head>
<body>
<!-- YOUR BODY GOES HERE -->
</body>
</html>

我用loaddata加载了html:
webView.loadData(injectHtmlAndCss(guide.getContent()), "text/html; charset=UTF-8", "UTF-8");

它就像一个符咒。啊。

10-07 19:35
查看更多