Flutter Web环境下主应用与InAppWebView通信失效问题求助
兄弟,我之前踩过Flutter Web和InAppWebView通信的坑,给你几个实用的排查方向和解决思路,你可以试试看:
先确认Web端的JS支持与跨域问题:Flutter Web的WebView实现和原生端差异很大,首先要确保你的InAppWebView配置了
javascriptMode: JavascriptMode.unrestricted,没开JS的话通信根本没法进行。另外Web环境下对跨域校验更严格,如果你加载的网页和Flutter Web的运行域名不一致,要在网页里处理好消息的源校验,或者在InAppWebView的配置里允许对应的跨域请求。换用Web端兼容的通信方式:如果之前原生端用的是
addJavaScriptHandler,在Web端部分版本的插件可能支持不好,你可以换个思路:- 网页向Flutter发消息:在网页JS里用
window.parent.postMessage('你的消息内容', '*')(同域场景下指定具体域名会更安全),然后Flutter端给InAppWebView绑定onWebMessageReceived回调来接收消息。 - Flutter向网页发消息:直接用
controller.evaluateJavascript(source: "window.receiveFlutterMessage('消息内容')"),提前在网页里定义好receiveFlutterMessage这个JS函数来处理即可。
- 网页向Flutter发消息:在网页JS里用
检查插件版本与依赖配置:确认你用的
flutter_inappwebview是最新的稳定版,老版本的Web端插件实现有不少bug,更新到最新版后很多兼容性问题会自动修复。另外在pubspec.yaml里要确保inappwebview_web这个Web端依赖被正确引入了。排查网页加载是否正常:有时候不是通信的问题,是Web端的网页加载失败了(比如本地资源路径不对),导致通信的JS代码根本没执行。你可以在InAppWebView的
onLoadError回调里看看有没有加载错误,或者直接在Web端的开发者工具里调试网页,检查JS控制台有没有报错。
你提供的代码片段不完整,我先帮你格式化出来,要是能补充完整通信相关的代码(比如JS handler注册、消息发送的逻辑),能更精准地帮你定位问题:
import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; // 此处可补充完整的页面逻辑,比如InAppWebView的初始化、通信相关代码
备注:内容来源于stack exchange,提问作者МИКОЛА ШАХ

