Flutter InAppWebView无控制台打印,网页与Flutter通信异常
问题原因与解决方案
核心问题
你把flutterInAppWebViewPlatformReady事件监听放在了按钮点击函数buttonClick内部——这个事件只会在WebView初始化完成时触发一次,第一次点击按钮时事件早已触发过,导致后续的callHandler代码根本不会执行。
修正步骤
1. 调整网页端代码
将事件监听移到全局作用域,确保WebView就绪时就完成初始化,点击按钮时直接调用通信方法:
<button onclick="buttonClick()" type="button">Cancel</button> <script> // 提前监听WebView就绪事件,初始化通信环境 window.addEventListener("flutterInAppWebViewPlatformReady", function(event) { console.log("Flutter WebView platform ready"); }); function buttonClick() { // 直接调用Flutter端的handler window.flutter_inappwebview.callHandler('cancelbuttonState', 1, true, ['msg','CancelbuttonClicked'], {test:'Go-Back'}) .then(function(result) { alert("Hello! Cancel Buttton clicked!!"); console.log('Hello! Cancel Buttton clicked!!'); console.log('Flutter返回结果:', result); }) .catch(function(error) { // 增加错误捕获,排查调用失败原因 console.error('调用Flutter handler失败:', error); }); } </script>
2. 确保Flutter端Handler正确注册
确认addJavaScriptHandler是在WebView创建完成后注册的,比如在onWebViewCreated回调中:
InAppWebView( onWebViewCreated: (controller) { // 在这里注册handler,确保WebView实例已初始化 controller.addJavaScriptHandler( handlerName: "cancelbuttonState", callback: (args) async { print('Cancel Button clicked'); print('收到网页参数:', args); return args.reduce((curr, next) => curr.toString() + next.toString()); }, ); }, initialUrlRequest: URLRequest(url: Uri.parse("你的网页地址")), )
额外检查点
- 确认Flutter项目中已正确依赖
flutter_inappwebview包,版本无兼容性问题 - 检查WebView的
initialUrlRequest是否加载了正确的网页地址 - 打开Flutter的控制台(
flutter run的终端)和网页控制台(在WebView中长按选择"Inspect"),查看是否有报错信息
内容的提问来源于stack exchange,提问作者Abu Qudama
相关产品推荐
相关产品推荐

