Android WebView 显示纯文本而不是 html

标签 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)
  • 必须通过 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 html>到 HTML

最佳答案

webview.loadData 行更改为:

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

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

还觉得奇怪的是 WebView 在后续的 Android 版本中发生了足够大的变化,以至于我们不必再对 html 进行编码了吗?这听起来很可疑。

关于Android WebView 显示纯文本而不是 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13976193/

相关文章:

java - 使用 AIR 代码实现原生 Android 代码

android - Android在WebView请求上加上X-Requested-With有什么好处?

android - 保存网页以供离线使用并调用相同的 android

ionic-framework - ionic 5/电容器 : How to find out if app is running in browser or compiled as native app?

c# - 实际有效的 Url 路径编码?

python - Django 的测试客户端返回编码不正确的 URL

url - 为什么此 URL 会在我的服务器上导致错误请求?

android - 如何在后台管理 ProgressBar?

android - 无法在 Android 6.0 上获取 sdcard 真实路径

android - 顶部带有图像的操作栏选项卡 - android