Android WebView:网页不可用,但我从html字符串加载它
我的html字符串如下所示:Android WebView:网页不可用,但我从html字符串加载它,android,android-webview,Android,Android 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&g
<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>
我有不同的html字符串,其中一些是可以的,但其他的给我这个错误…问题在哪里?解决了,给我很多“有用”的答案,因为这真的是一个讨厌的webview错误,我想我的答案会帮助你们很多人
如果html页面确实包含“%”、“\”或“#”字符之一,loadData()方法将失败!!
因此,您必须手动替换这些chr,这是我的类:
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();
}
}
公共类BuglesWebView扩展了WebView{
公共BuglesWebView(上下文){
超级(上下文);
}
公共BuglesWebView(上下文上下文、属性集属性){
超级(上下文、属性);
}
公共BuglesWebView(上下文上下文、属性集属性、int-defStyles){
超级(上下文、属性、定义样式);
}
@凌驾
公共void加载数据(字符串数据、字符串mimeType、字符串编码){
super.loadData(solveBug(data)、mimeType、编码);
}
私有字符串(字符串数据){
StringBuilder sb=新的StringBuilder(data.length()+100);
char[]dataChars=data.tocharray();
对于(inti=0;i使用loadDataWithBaseURL代替
webView.loadDataWithBaseURL(null, html,"text/html", "UTF-8", null);
以下是具有此解决方法的讨论:
评论:#14和#18
在这里工作。我刚刚遇到了这个问题,并且有很多相关的bug报告与之相关。我有一个%是我的内联CSS,导致页面无法呈现。当我在文档中看到
encoding参数指定数据是base64还是URL
编码。如果数据是base64编码的,则编码的值
参数必须为“base64”。对于该参数的所有其他值,
包括null,假设数据使用ASCII编码
安全URL字符范围内的八位字节,并使用标准
%超出该范围的八位字节的URL的xx十六进制编码。例如,
“#”、“%”、“\”、“?”应替换为%23、%25、%27、%3f
分别
但是遗憾的是,按照指示使用base64
并没有什么区别。在我的4.3设备上一切都很好,但在2.3上什么都不会呈现。查看所有的bug报告,每个人都提出了不同的建议,但唯一对我有效的是使用
webView.loadDataWithBaseURL(null,data.content,“text/html”,“UTF-8”,null);
小心不要使用text/html;
而不是text/html
,因为它会自动失败!感谢您使用表达式“自动失败”。这使我能够在Google上找到此线程;此解决方法解决了我的问题!
webView.loadDataWithBaseURL(null, html,"text/html", "UTF-8", null);