我正在尝试将静态 HTML 页面加载到 webview 中。
当我将其内容更改为一个简单的 html 页面时,它可以工作。所以我认为这个 html 文件有问题,但是在 Mozilla 和 Chrome 上可以正确查看该文件。所以我的问题是
- android webview 没有通过的常见 html 错误。
- 如果 html 文件有问题,那是什么问题。
html 文件 http://snipt.org/vagL9
截屏
我正在尝试将静态 HTML 页面加载到 webview 中。
当我将其内容更改为一个简单的 html 页面时,它可以工作。所以我认为这个 html 文件有问题,但是在 Mozilla 和 Chrome 上可以正确查看该文件。所以我的问题是
html 文件 http://snipt.org/vagL9
截屏
我已将提供的 html 文件放置到带有 name 的 assets 文件夹中snipt.html
。并且此代码正确显示它。
final WebView webView = (WebView) findViewById(R.id.webview);
final WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.loadUrl("file:///android_asset/snipt.html");
这是一个 SDK 错误 loadData(String, ..., ...) 方法将字符串的内容转换为 uri,因此我的代码包含需要编码的字符,例如 % 它截断了导致错误的代码。所以在这里找到的解决方案是将这些字符转换为 unicode 作为此代码
public final static void webViewLoadData(WebView web, String html) {
StringBuilder buf = new StringBuilder(html.length());
for (char c : html.toCharArray()) {
switch (c) {
case '#': buf.append("%23"); break;
case '%': buf.append("%25"); break;
case '\'': buf.append("%27"); break;
case '?': buf.append("%3f"); break;
default:
buf.append(c); break;
}
}
web.loadData(buf.toString(), "text/html", "utf-8");
}
我面临着同样的问题。
通过应用下面的代码解决了这个问题
WebView webView = (WebView) findViewById(R.id.webView1);
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(location);
HttpResponse response = httpClient.execute(httpGet);
String data = new BasicResponseHandler().handleResponse(response);
String base64 = android.util.Base64.encodeToString(data.getBytes("UTF-8"), android.util.Base64.DEFAULT);
webView.loadData(base64, "text/html; charset=utf-8", "base64");
这将解决从 android 1.5+ 开始的 webview 渲染中的所有问题
一定会为你工作!