iPhone端Flutter WebView中alert()无法显示的解决求助
解决Flutter WebView iOS端alert不弹出的问题
你的问题出在iOS端的WKWebView默认不会自动处理JavaScript的alert()对话框,需要手动拦截并通过Flutter原生对话框展示,而Android端WebView默认支持该功能,所以能正常显示。
修改你的WebView代码,添加navigationDelegate并实现onJsAlert回调即可解决:
WebView( key: _key, javascriptMode: JavascriptMode.unrestricted, initialUrl: url, gestureNavigationEnabled: true, onWebViewCreated: (controller) { setState(() { webViewController = controller; }); }, onJsAlert: (controller, alertRequest) async { await showDialog( context: context, builder: (context) => AlertDialog( title: Text(alertRequest.message), actions: [ TextButton( onPressed: () { Navigator.pop(context); alertRequest.complete(); }, child: const Text('确定'), ), ], ), ); return JsAlertResponse(true); }, ),
关键说明:
onJsAlert是WebView组件提供的专属回调,用于拦截网页中的alert()调用- 在回调内通过Flutter的
showDialog弹出原生风格对话框,点击确定后调用alertRequest.complete()通知WebView对话框已处理 - 该回调仅作用于iOS端,Android端仍会使用系统默认的alert对话框
内容的提问来源于stack exchange,提问作者Daniil
相关产品推荐
相关产品推荐

