解决Webview的loadData方法加载html片段。乱码,且webview和h5无法交互问题

Webview加载html片段时一般有两种方法:


1 loadData()方法,使用此方法有两个问题,一个是加载页面出现乱码问题,一个是加载的页面无法和webview交互(我推测是编码导致的html源码数据格式出现问题,以至于找不到js的方法导致的)loadData(data, "text/html;charset=UTF-8",null);此种方法可解决编码问题亲测有效。至于交互问题,可参考此篇博客可使用下边方法
final String digits = "0123456789ABCDEF";
public String encode(String s){
// Guess a bit bigger for encoded form
StringBuilder buf = new StringBuilder(s.length() + 16);
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
|| (ch >= '0' && ch <= '9') || ".-*_".indexOf(ch) > -1) { //$NON-NLS-1$
buf.append(ch);
} else {
byte[] bytes = new String(new char[] { ch }).getBytes();
for (int j = 0; j < bytes.length; j++) {
buf.append('%');
buf.append(digits.charAt((bytes[j] & 0xf0) >> 4));
buf.append(digits.charAt(bytes[j] & 0xf));
}
}
}
return buf.toString();
}

最后综合起来就是loadData(encode(data), "text/html;charset=UTF-8",null);
以上是亲测有效果

2 loadDataWithBaseURL方式加载



loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl)
xxxxx
之前一直搞不明白baseUrl这个参数到底是干嘛的,直到一天忽然在网上看到一篇帖子,用处在于,有些h5代码片段中,有些地址使用的是相对路径比如src='/uploads/allimg/130923/1FP02V7-0.png' 如果baseUrl此参数不传或者为空的话,这张图片就无法显示,所以baseUrl为此图片地址的前缀http://www.xxxxx.com

此种方式没有字符乱码问题,不过点击网页链接,跳转到子页面之后点击h5返回到上一个页面之后,会显示空白,网上说是本地的html文件无法添加到历史记录中,需要手动实现,暂时还没有找到好的解决办法,希望有小伙伴知道的能指点,不胜感激!

3 loadDataWithBaseURL 方式加载踩到的坑


当使用loadDataWithBaseURL 加载html源码的时候在个别手机上会出现webview无法加载数据的情况但是使用loadurl方式加载就没问题,经过几次尝试查找相关资料,确定是因为Android 系统会有一个叫Android System Webview的apk属于系统级应用,可以更新,当系统webview版本在63以上的时候就会出现webview加载异常的问题。目前测试了几个机型,三星手机的出现率最高。猜想大概是因为系统webview内部的加载源码的方法做了修改或者限制,webview的兼容性本身做的就差,目前我的解决办法是替换掉系统webview的内核,使用三方webview加载,目前使用的是腾讯的TBS,问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值