【问题标题】:Loading Static HTML to Webview将静态 HTML 加载到 Webview
【发布时间】:2023-04-03 13:04:01
【问题描述】:

我正在尝试将静态 HTML 页面加载到 web 视图中。

当我将其内容更改为一个简单的 html 页面时,它可以工作。 所以我认为这个 html 文件有问题,但是在 Mozilla 和 Chrome 上可以正确查看该文件。所以我的问题是

  • android webview 没有通过的常见 html 错误。
  • 如果 html 文件有问题,那是什么问题。

html 文件 http://snipt.org/vagL9

截图

【问题讨论】:

  • 你能把你用来加载 html 到 WebView 的代码贴出来吗?
  • 我已经将它包含在问题中 html文件snipt.org/vagL9
  • 那是html代码。我说的是把你的 html 文件加载到你的 WebView 中的 java 代码。
  • 谢谢我发现了错误,我将文件内容加载到一个字符串中,然后修改它的dom。然后将字符串加载回来。但是它不起作用,因为它包含一个 '%' 字符。我认为它不会逃避它的内容!

标签: android html xhtml webview


【解决方案1】:

我已将提供的 html 文件放入名为 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");

【讨论】:

  • 我这样做了,但没有用。我不直接加载文件,而是将完整的文件加载为 dom 并修改其元素,然后取回 html。但是,当我从文件中删除 '%' 字符时,它工作正常!
【解决方案2】:

这是一个 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");
}

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题。

    通过应用下面的代码解决了这个问题

    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 渲染中的所有问题

    一定会为你工作!

    【讨论】:

      猜你喜欢
      • 2011-07-19
      • 2011-08-10
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      相关资源
      最近更新 更多