Android WebView显示纯文本而不是html

xba*_*esx 2 android urlencode android-webview

首先,我要说这只是Android 2及更早版本的问题(4似乎没有受到影响,我没有测试3).

我有一个WebView从字符串加载HTML.HTML看起来像这样:

<html>  
    <head>
        <link rel='stylesheet' type='text/css' href='http://www.robotsidekick.com/test.css?rev=0' />
    </head>
    <body>
        <h1>Hello World</h1>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

您可以看到css文件如下所示:

body {
    font-family: "Lucida Console", "Lucida Sans Typewriter", Monaco, "Bitstream Vera Sans Mono", monospace;
}
h1 {
    border-bottom: 3px solid #ccc;
}
Run Code Online (Sandbox Code Playgroud)

WebView代码如下所示:

final WebView webview = new WebView(this);
setContentView(webview);
final String result = "<html><head><link rel='stylesheet' type='text/css' href='http://www.robotsidekick.com/test.css?rev=0' /></head><body><h1>Hello World</h1></body></html>";
webview.loadData(result, "text/html", Encoding.UTF_8.toString());
Run Code Online (Sandbox Code Playgroud)

怎么了

我看到html代码,WebView好像我已经将mime类型设置为纯文本.

html作为纯文本发生了什么

我期待什么(以及Android 4.x中会发生什么

我看到了html WebView

有一些事情必须是真实的,以显示我看到的症状:

  • Android 2.x(我使用的是2.3.7和2.2)
  • 必须通过url访问css href="http://www.robotsidekick.com/test.css?rev=0"而不是href="test.css"(但是如果它是真正的css文件href="http://www.thisisnotarealurl.fake/test.css?rev=0导致同样的问题则无关紧要)
  • css必须有一个get参数?rev=0,但它无关紧要

还要注意以下内容没有什么区别:

  • 使用适当的"而不是'HTML
  • link标签贴近或不贴身
  • CSS的内容
  • 将doctype添加<!DOCTYPE html>到HTML中

xba*_*esx 6

webview.loadData行更改为:

webview.loadData(URLEncoder.encode(result).replaceAll("\\+", " "), "text/html", Encoding.UTF_8.toString());
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.对我来说,一个?没有编码的相对路径不会导致问题,而一个没有编码的假网址会导致问题,这似乎很奇怪?.

还发现奇怪的是,WebView在Android的后续版本中我们不再需要编码我们的html了吗?这听起来很可疑.