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
相关产品推荐
相关产品推荐

