Android WebView显示纯文本而不是html

时间:2012-12-20 16:13:20

标签: android android-webview urlencode

首先,我要说这只是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>

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

body {
    font-family: "Lucida Console", "Lucida Sans Typewriter", Monaco, "Bitstream Vera Sans Mono", monospace;
}
h1 {
    border-bottom: 3px solid #ccc;
}

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

发生了什么

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

what happens html as plain text

我期待什么(以及Android 4.x中发生的事情

我在WebView

中看到了html

为了显示我所看到的症状,有几件事情必须是真实的:

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

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

  • 在HTML
  • 中使用适当的"代替'
  • link标签自行关闭
  • css的内容
  • 将文档类型<!DOCTYPE html>添加到HTML

1 个答案:

答案 0 :(得分:6)

webview.loadData行更改为:

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

解决了这个问题。对我来说,使用未编码的?的相对路径不会导致问题,而带有未编码的?的虚假URL确实会导致问题,这似乎很奇怪。

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