3

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

发生什么了

我看到了 html 代码,WebView就好像我将 mime 类型设置为纯文本一样。

html 作为纯文本会发生什么

我的期望(以及在 Android 4.x 中会发生什么

我在WebView

有几件事必须是真实的才能显示我所看到的症状:

  • Android 2.x(我使用的是 2.3.7 和 2.2)
  • css 必须通过 url 访问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 html>向HTML添加文档类型
4

1 回答 1

6

将行更改为webview.loadData

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

解决了这个问题。?在我看来,未编码的相对路径不会引起问题,而未编码的假 URL确实会导致问题,这对我来说似乎很奇怪?

还觉得奇怪的是,WebView在后续版本的 Android 中,我们不必再编码我们的 html 了?这听起来很可疑。

于 2012-12-20T16:13:20.240 回答