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

如何解析runJavaScriptReturningResult返回的对象以提取字符串值?

解决Flutter WebView runJavaScriptReturningResult返回对象无法解析的问题

核心原因

你的JS表达式可能未返回预期的字符串,或是WebView将返回值包装成了非字符串类型的对象;另外如果DOM元素不存在,表达式会抛出错误,导致返回值异常。

解决方案

方案1:在JS层面确保返回字符串并添加容错处理

修改JS代码,用try/catch和可选链处理元素不存在的情况,确保始终返回字符串:

Future<void> _injectJavascript(BuildContext context) async {
    final ret = await controller.runJavaScriptReturningResult('''
        try {
            const statusElem = document.getElementsByClassName("status-col")[1]?.childNodes[0]?.childNodes[0];
            return statusElem ? `${statusElem.innerHTML}: ${statusElem.title}` : "";
        } catch(e) {
            return "";
        }
    ''');
    FFAppState().paymenturlappstate = ret as String;
    return;
}

方案2:Dart端处理Web场景下的JS原生对象

如果是Flutter Web应用,WebView返回的可能是JS原生对象,需用dart:js包转换:

  1. 导入依赖包:
import 'dart:js' as js;
  1. 处理返回值:
Future<void> _injectJavascript(BuildContext context) async {
    final ret = await controller.runJavaScriptReturningResult(
        'document.getElementsByClassName("status-col")[1].childNodes[0].childNodes[0].innerHTML + ": " + document.getElementsByClassName("status-col")[1].childNodes[0].childNodes[0].title');
    final resultStr = js.JsObject.fromBrowserObject(ret).toString();
    FFAppState().paymenturlappstate = resultStr;
    return;
}

方案3:用JSON序列化强制返回字符串

将JS结果用JSON.stringify包裹,在Dart端解析后去除引号:

Future<void> _injectJavascript(BuildContext context) async {
    final ret = await controller.runJavaScriptReturningResult('''
        JSON.stringify(
            document.getElementsByClassName("status-col")[1].childNodes[0].childNodes[0].innerHTML + ": " + document.getElementsByClassName("status-col")[1].childNodes[0].childNodes[0].title
        )
    ''');
    FFAppState().paymenturlappstate = ret.toString().replaceAll('"', '');
    return;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:20:04