Android 加载H5页面数据无法传递正确展示的一个可能原因
最近解决一个比较有意思的问题:
功能: 是这样的Android 通过 WebView 加载一个H5网页,然后向网页里动态传递一些数据,传递方式为将数据转成 json,然后通过 loadurl 的方式传递json,调用js设置网页数据。
现象: 使用过程中发现某些情况下页面无法正确加载传递过去的json数据,导致H5页面展示错误。
原因: Android 端代码通过Gson将对象转为字符串,当字符串种含有换行符(\n或者\r)的时候,H5 js代码接受到数据解析json字符串的是时候会报错,然后下面的js代码会终止运行,导致界面展示错误。
解决: 在H5页面获取到数据转换为json对象前将特殊字符增加转义字符
jsonstring
=jsonstring
.replace(/[\r]/g, "\\r").replace(/[\n]/g, "\\n")
这里还有其他解决办法,比如控制输入特殊字符,这里根据业务情况决定