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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:32:41