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

Flutter InAppWebView如何让特定链接跳转至外部应用或浏览器?

解决InAppWebView中window.open链接无法唤起外部应用的问题

你的问题核心是window.open触发的新窗口请求没被正确拦截——InAppWebView默认没启用多窗口支持,导致onCreateWindow回调根本不会触发,链接自然还是在原WebView里加载。按下面的步骤调整就能解决:

1. 开启多窗口支持

在InAppWebView的settings里必须打开supportMultipleWindows,否则window.open的请求会直接在当前WebView加载,不会走到onCreateWindow回调:

InAppWebView(
  initialUrlRequest: URLRequest(url: Uri.parse("你的网页地址")),
  settings: InAppWebViewSettings(
    supportMultipleWindows: true, // 关键配置,必须开启
    javaScriptEnabled: true, // 确保网页JS能正常执行
  ),
  onCreateWindow: (controller, createWindowAction) async {
    final targetUrl = createWindowAction.request.url;
    if (targetUrl != null) {
      // 指定用外部应用打开链接
      await launchUrl(
        targetUrl,
        mode: LaunchMode.externalApplication, // 优先唤起对应APP(比如YouTube),无对应APP则用系统浏览器
      );
    }
    return Future.value(false); // 返回false表示不创建新的WebView窗口
  },
)

2. 配置launchUrl的启动模式

使用url_launcher包时,选对启动模式能精准控制打开行为:

  • LaunchMode.externalApplication:优先唤起目标APP(比如YouTube链接会直接打开YouTube应用),未安装则用系统浏览器
  • LaunchMode.externalNonBrowserApplication:强制唤起非浏览器应用,适合必须打开YouTube的场景

3. 平台权限配置

  • Android:最新版url_launcher会自动处理权限,无需额外配置;若用旧版本,需确认AndroidManifest.xml中Activity的intent-filter配置正常。
  • iOS:在ios/Runner/Info.plist中添加允许查询YouTube的scheme,否则无法唤起YouTube应用:
<key>LSApplicationQueriesSchemes</key>
<array>
  <string>youtube</string>
</array>

4. 可选:只拦截特定链接(比如YouTube)

如果只想让YouTube链接走外部打开,其他链接正常在WebView内处理,可以加个判断逻辑:

onCreateWindow: (controller, createWindowAction) async {
  final targetUrl = createWindowAction.request.url;
  if (targetUrl != null) {
    final isYoutubeLink = targetUrl.host.contains("youtube.com") || targetUrl.host.contains("youtu.be");
    if (isYoutubeLink) {
      await launchUrl(
        targetUrl,
        mode: LaunchMode.externalApplication,
      );
      return Future.value(false); // 不创建WebView窗口
    }
  }
  // 其他链接继续在新的WebView窗口打开(若需要)
  return Future.value(true);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:55:21