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

Flutter webview_flutter库postMessage在安卓模拟器无法正常工作

问题解决:Android上WebView postMessage报错“Method not found”

问题原因

Android WebView的全局环境中存在原生的postMessage API(浏览器Web API的一部分),你自定义的JavascriptChannel命名为postMessage,和原生API重名导致冲突。Android端会优先识别原生方法,因此找不到你定义的JavascriptChannel对应的方法,而iOS WebView的全局变量处理逻辑不同,不会出现该冲突。

解决方案

修改JavascriptChannel的名称以避免和原生Web API重名,同时同步调整JS代码中的调用名称。

修改后的Flutter代码

WebView(
  javascriptMode: JavascriptMode.unrestricted,
  debuggingEnabled: true,
  initialUrl: '<url_to_my_template>',
  onPageStarted: (url) {},
  onPageFinished: (url) async {},
  javascriptChannels: <JavascriptChannel>{
    JavascriptChannel(
      // 修改名称为FlutterPostMessage,避免冲突
      name: 'FlutterPostMessage',
      onMessageReceived: (message) async {
        print('postMessage: ${message.message}');
      },
    ),
  },
  onWebViewCreated: (WebViewController controller) {
    setState(() {
      _controller = controller;
    });
  },
),

修改后的JS代码

function troca_dados_envia(obj){
    "use strict";
    // 使用修改后的JavascriptChannel名称
    FlutterPostMessage.postMessage(JSON.stringify(obj));
    // 注:JavascriptChannel的postMessage不支持目标源参数,故去掉"*"
}

补充说明

JavascriptChannel提供的postMessage方法仅需传递消息内容,原生window.postMessage的目标源参数在这里不需要,去掉后可避免不必要的逻辑混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:40:38