WebView使用loadDataWithBaseURL方法显示源HTML而非渲染视图

17

我正在开发一个使用WebView渲染自定义html的应用程序。 但是当我调用 loadDAtaWithBaseURL(URL, "<html><h1>TEST</h1></html>", "text/html; charset=utf-8;", "utf-8", null); 它在Genymotion模拟器上显示html本身(而不是渲染后的结果)。 在我的HTC-one上,呈现出了渲染后的html。 每个结果如附图所示。

Genymotion模拟器上的显示结果 HTC one上的显示结果

是否有人有同样的问题或解决方案? 谢谢。


18
抱歉,各位,我自己解决了这个问题。问题出在"text/html; charset=utf-8;"上,应该改为只有"text/html"。 - user2779344
1
我想请你喝一杯啤酒。你救了我。 - Kinggeov
2个回答

2

Don't enter mimeType below KitKat.

fun getMimeType(): String? {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        "text/html; charset=utf-8"
    } else {
        null
    }
}
loadDAtaWithBaseURL(URL, "<html><h1>TEST</h1></html>", getMimeType(), "utf-8", null);

Java:

if(Build.VERSION.SDK_INT < 21)
    webView.loadDataWithBaseURL("about:blank","<html><h1>TEST</h1></html>","text/html", "UTF-8",null);
else
    webView.loadDataWithBaseURL("about:blank","<html><h1>TEST</h1></html>","text/html; charset=utf-8", "UTF-8",null);

很好,似乎对我有帮助。你是怎么想到这个的? - CodeSmith
当我添加了mimeType时,这个问题就出现了,所以并不难解决 :) - Salih Balkan

0

关于您提供的信息,我无法清楚地调试出问题,但是这是应该如何完成的,只需检查您是否遗漏了某些内容:

  1. 首先,在清单文件中的活动中添加此行:

  2. 使用以下代码加载数据:

    public void loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl);

这样就完成了。

loadDataWithBaseURL(Url, data, "text/html", "UTF-8", historyUrl)

请注意

如果基本URL使用数据方案,则此方法等效于调用loadData(),并且historyUrl将被忽略,并且数据将被视为data: URL的一部分。 如果基本URL使用任何其他方案,则数据将作为纯字符串(即不是data URL的一部分)加载到WebView中,并且字符串中的任何URL编码实体都不会被解码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接