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

Flutter中调用JS函数getUserPush()后如何获取控制台数据并留存?

解决Flutter中获取JS函数输出的问题

问题根源

你调用的getUserPush()函数是通过console.log()输出结果,而非直接return返回值。runJavaScriptReturningResult()只能获取JS函数的return值,所以拿不到控制台输出的内容,才会返回null。

解决方案

方案1:修改JS函数返回结果

如果能修改网页端的JS代码,直接让getUserPush()返回目标值,原Flutter代码就能正常获取:

// 修改后的JS函数
function getUserPush() {
  // 保留原有逻辑,最后添加return语句
  const result = "37"; // 替换为原函数的实际计算结果
  console.log(result); // 可保留控制台输出(如果需要)
  return result; // 关键:返回结果供Flutter获取
}

Flutter代码可以优化为更直观的async/await写法:

onPressed: () async {
  try {
    final userId = await controller.runJavaScriptReturningResult('getUserPush()');
    String hZonesInt = userId.toString();
    print(hZonesInt); // 此时会输出"37"
    // 此处执行后续记录操作
  } catch (e) {
    print(e);
  }
},

方案2:监听WebView控制台消息(无法修改JS时使用)

如果没法修改网页的JS代码,就通过WebView的控制台消息监听来捕获输出:

// 初始化WebViewController时添加控制台监听
WebViewController controller = WebViewController()
  ..setJavaScriptMode(JavaScriptMode.unrestricted)
  ..loadRequest(Uri.parse("你的网页地址"))
  ..setOnConsoleMessage((ConsoleMessage message) {
    // 过滤匹配目标控制台消息
    if (message.message == "\"37\"" || message.message == "37") {
      print("捕获到控制台输出:${message.message}");
      // 此处将数据存入变量或本地存储,执行后续记录
    }
  });

// 按钮点击只需调用JS函数
onPressed: () {
  controller.runJavaScript('getUserPush()');
},

注意:控制台消息内容可能带引号(比如你看到的"37"),判断时要匹配实际输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:03:24