2012-09-08 19 views
2

我的HTML字符串是这样的:的WebView:网页不可用,但是我从一个HTML字符串加载

<meta http-equiv=\"Content-Type\" content=\"text/html\"; charset=\"UTF-8\" /> 
<p style="text-align: justify;"> paragraph </p> 
<p style="text-align: justify;"> another one with <strong> strong attr </p> 
<p style="text-align: justify;"> in general p have <strong> strong</strong> and <em> em parts</em></p> 

和我一起加载:

view.loadData(htmlString, "text/html", "UTF-8"); 

我有不同的HTML字符串,一些他们没问题,但其他人给我这个错误...问题在哪里?

回答

3

解决了,给了这个答案很多“有用的”,因为它真的是一个讨厌的web视图错误,我想我的答案会帮助你很多!

如果您的html页面确实包含“%”,“\”或“#”字符之一,则loadData()方法将失败! 所以,你必须手动替换这些字符,这里是我的课:

public class BuglessWebView extends WebView{ 

public BuglessWebView(Context context) { 
    super(context); 
} 

public BuglessWebView(Context context,AttributeSet attributes){ 
    super(context,attributes); 
} 

public BuglessWebView(Context context,AttributeSet attributes,int defStyles){ 
    super(context,attributes,defStyles); 
} 

@Override 
public void loadData(String data, String mimeType, String encoding) { 

    super.loadData(solveBug(data), mimeType, encoding); 
} 

private String solveBug(String data){ 
    StringBuilder sb = new StringBuilder(data.length()+100); 
    char[] dataChars = data.toCharArray(); 

    for(int i=0;i<dataChars.length;i++){ 
     char ch = data.charAt(i); 
     switch(ch){ 
     case '%': 
      sb.append("%25"); 
      break; 
     case '\'': 
      sb.append("%27"); 
      break; 
     case '#': 
      sb.append("%23"); 
      break; 
     default: 
      sb.append(ch); 
      break; 
     } 
    } 

    return sb.toString(); 
} 
} 

这里的谷歌代码的讨论链接:http://code.google.com/p/android/issues/detail?id=1733

+0

感谢您的解决方案!有用。 – techiee

0

我刚刚遇到了这个问题,并且出现了很多相关的错误报告。我有%是我的内联CSS,导致页面不呈现。我以为一切都OK,当我在文档中看到了WebView.loadData(...)

编码参数指定的数据是否是一个base64或URL 编码。如果数据是base64编码的,则编码 参数的值必须是'base64'。对于参数 的所有其他值(包括空值),假定数据在安全URL字符范围内对 八位位组使用ASCII编码,并对该范围以外的八位位组使用标准的 %xx十六进制URL编码。例如, '#','%','\','?'应分别替换为%23,%25,%27,%3f 。

但是按照指示使用base64没有什么区别。在我的4.3设备上,一切都很好,但是2.3没有任何东西会呈现。纵观所有的bug报告提示每个人不同的东西,但只为我工作的事情,用

webView.loadDataWithBaseURL(null, data.content, "text/html", "UTF-8", null);

要小心,不要使用text/html;,而不是text/html,因为它会默默地失败!

相关问题