Android开发:解决WebView调用JS传递字符串异常问题

一.问题描述

WebView调用JS传递字符串时好时坏,可以发现当字符串中含有一些特殊符号和转义符时就会出现异常,控制台报错:

String script = String.format("javascript:setCode('%1$s')", content);
webView.evaluateJavascript(script, null);
Uncaught SyntaxError: Invalid or unexpected token

原因在于使用evaluateJavascript来调用js函数时,不会对字符串进行编码处理的而是直接传过去。

二.解决方案

既然知道了是特殊符号和转义符引起的问题,那处理好这些符号就好了,首先看网上常见的处理法案,是对这些符号进行预先处理

params.replace("'", "\\'")
      .replace("\"", "\\\"")
      .replace("\n", "\\n");

实际在使用这种方法会发现原本要显示'\n'字符串却变成了换行,效果并不好。所以最佳方法应该是采用URLEncoder编码字符串参数后传递

content = URLEncoder.encode(content, "UTF-8").replaceAll("\\+", "%20");
String script = String.format("javascript:setCode('%1$s')", content);
webView.evaluateJavascript(script, null);

这里要注意URLEncoder会将空格符号变成'+'字符,所以编码后要替换一下,这不会影响原来的'+'字符,然后在JS代码中将字符串解码即可

content= decodeURIComponent(content)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发大观园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值