WebView中js交互时参数中含特殊字符及乱码的问题

WebView中js交互时参数中含特殊字符及乱码的问题

使用WebView一般会用到js交互,无非两种:1.后台调用客户端的方法(客户端写方法并使用@JavaScript注解改方法即可);2.客户端调用后台的方法(webView.loadUrl(“javascript:(’ “+param1+” ‘,’ “+param2+” ‘)”))。都比较简单。但是最近我觉在js交互上踩了2个大坑。特此记录。

js方法中的参数含有特殊字符

问题描述

特殊字符就是在参数中含有*,例如:\n,\t,\r等已 \ 开头的字符,我遇到的问题就客户端调用后台的方法,把json字符串参数传给后台,但是json字符串参数中含有\n换行符,后台在解析json的时候会有异常。百度得知,javascript在解析json的时候遇到特殊字符会先进行转义,导致报错。JSON.parse 解析json字符串时,遇换行符报错

解决方案

既然知道了错误原因,那解决方案也很简单,直接将字符串中的特殊字符去掉或者转义

String str = "哈哈哈\n嘻嘻嘻\n哈哈";
str.replace("\n","\\n");
或者
String str = "哈哈哈\n嘻嘻嘻\n哈哈";
str.replaceAll("\\\\n","");

js参数中含有乱码

问题描述

这也是我碰到的比较奇葩的一个问题。在客户端调用webView.loadUrl(“javascript:(’ “param1” ‘)”)方法回调后台的方法时,param1中含有乱码,导致调用js失败(这个问题但是我们还有一点争议,我说我打断点跟踪,调用js的代码触发了啊,而且没有异常,但是后台的同事就是说他那边没有调起来,最后打log日志发现参数中有乱码,难道真是因为乱码导致js调用失败?将乱码的字符串换成普通字符串,一切ok,原来真是乱码的问题。又长见识了有木有)。因为牵涉到第三方应用,所以乱码的问题不可避免。

解决方案

原来webView.loadUrl(“javascript:(…)”)方法注入js时会先进行解码,因为参数中有乱码问题,所以导致解码异常,注入js失败。
在Android4.4之后有另一种注入js的方案:mWebView.evaluateJavascript(“javascript:(…)”);采用这种方案不会先进行解码,直接注入。Google也推荐4.4以上使用该方法进行js注入。通过这种方法成功解决上述问题。Android WebView注入js中带有URL-encode字符时报错问题

小结

这算是我碰到的两个比较奇葩的问题吧,看似简单,但又不容易定位。再次记录,希望可以帮到其他童鞋。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值