首先,我要说这只是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类型设置为纯文本。
我期待什么(以及Android 4.x中发生的事情
我在WebView
为了显示我所看到的症状,有几件事情必须是真实的:
href="http://www.robotsidekick.com/test.css?rev=0"
访问css而不是href="test.css"
(但是如果它是真正的css文件href="http://www.thisisnotarealurl.fake/test.css?rev=0
并不会导致同样的问题)?rev=0
,但它无关紧要还要注意以下内容没有什么区别:
"
代替'
link
标签自行关闭<!DOCTYPE html>
添加到HTML 答案 0 :(得分:6)
将webview.loadData
行更改为:
webview.loadData(URLEncoder.encode(result).replaceAll("\\+", " "), "text/html", Encoding.UTF_8.toString());
解决了这个问题。对我来说,使用未编码的?
的相对路径不会导致问题,而带有未编码的?
的虚假URL确实会导致问题,这似乎很奇怪。
还发现奇怪的是WebView
在Android的后续版本中发生了足够的变化,我们不再需要编码我们的html了吗?听起来很可疑。