You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android WebView新旧版本JSON解析行为差异及修复方案咨询

问题解答

1. WebView内核调整导致解析行为差异的原因

Chromium内核从91版本开始(对应WebView 91+正式版本)调整了JavascriptInterface接口的参数传递逻辑:对于JS侧传递给Native侧的字符串参数,如果包含双引号、逗号等URI保留字符,内核会自动对字符串做一次URL编码后再传递给Native层。
旧版WebView(80及更早版本)不存在该自动编码逻辑,JS侧输出的原始JSON字符串会直接传递到Kotlin层,因此可以直接完成解析。
报错的根因是新版WebView把JSON中的双引号(")编码为%22、逗号(,)编码为%2C,破坏了原有JSON的结构,解析时检测到字符串未正常闭合就抛出了对应异常。

2. 当前修复方案的潜在问题

该临时方案可以解决当前版本的兼容问题,但存在以下风险:

  • 内容篡改风险:如果JSON字符串本身包含合法的URL编码片段(比如URL参数中自带的%20、%25等原生编码内容),调用URLDecoder.decode会直接解码这些本应保留的编码内容,改变原始数据的含义,引发后续业务逻辑错误。
  • 异常崩溃风险:如果字符串中存在不符合URL编码规范的%开头字符序列,URLDecoder.decode会直接抛出IllegalArgumentException,导致整个业务流程崩溃。
  • 后续兼容性风险:如果后续WebView内核再次调整参数传递逻辑,取消自动编码行为,该修复方案会反过来错误解码正常的JSON字符串,导致解析再次失败。
    如果需要更稳妥的兼容方案,建议优先从JS侧调整传递逻辑:将JSON内容做Base64编码后再传递给Native侧,Native侧解码Base64后再解析JSON,可完全规避不同版本WebView的编码兼容问题。

内容的提问来源于stack exchange,提问作者user14272026

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:54:02