WebView无法正确呈现,而是显示源代码

时间:2014-05-28 15:10:11

标签: android webview

我有一个应用程序,其中一些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);
    }

以下是其他人正在发生的事情的一个例子:

HTML contents are not being rendered at all

我完全不知道这件事。

3 个答案:

答案 0 :(得分:3)

事实证明,loadDataWithBaseURL方法不适用于Android 4.1 / 4.2。

我真的需要更改基本网址,因为我的HTML代码中的相对路由引用了很多资源,因此我在<head>标记中注入了<base>标记。例如:

<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");

它就像一个魅力。呼。

答案 1 :(得分:0)

替换

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

webView.loadDataWithBaseURL(Const.WEB_VIEW_BASE_URL, injectHtmlAndCss(guide.getContent()), "text/html", null, null);

然后,在下面添加声明,它将起作用。

webSettings.setDefaultTextEncodingName("UTF-8");

答案 2 :(得分:0)

我遇到了同样的问题,就我而言,HTML代码之前还有一个换行符,所以我认为这是由于HTML HTML format error文件格式错误引起的