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

何が起こるのですか

WebViewMIME タイプをプレーンテキストに設定したかのように、html コードが表示されます。

HTML をプレーンテキストとして表示するとどうなるか

私が期待すること (および Android 4.x で何が起こるか)

htmlが表示されますWebView

私が見ている症状を示すには、真実でなければならないことがいくつかあります。

  • Android 2.x (私は 2.3.7 と 2.2 を使用していました)
  • href="http://www.robotsidekick.com/test.css?rev=0"css は、URLを介してアクセスする必要がありますhref="test.css"(ただし、実際の css ファイルhref="http://www.thisisnotarealurl.fake/test.css?rev=0が同じ問題を引き起こすかどうかは問題ではありません)。
  • CSS には get パラメータが必要ですが、?rev=0それが何であるかは問題ではありません

また、以下は違いがないことにも注意してください。

  • HTML での適切な"代わりの使用'
  • linkタグ自体を閉じるかどうか
  • cssの中身
  • <!DOCTYPE html>HTML へのDoctype の追加
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 に答える