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

Flutter WebView加载WordPress JSON Feed中Google Ads时自动唤起外部浏览器问题

问题解决:阻止Google Ads在Flutter WebView中自动唤起外部浏览器

问题分析

你的代码中navigationDelegate的逻辑是:除了内部post://协议和YouTube链接外,所有可跳转的URL都会调用外部浏览器打开。Google Ads的URL会命中await canLaunchUrl(...)的条件,因此被强制跳转到外部浏览器,导致广告无法在WebView内正常交互。

解决方案

修改navigationDelegate,将Google Ads相关域名加入允许在WebView内导航的白名单,避免其被外部浏览器拦截。

修改后的核心代码片段

navigationDelegate: (NavigationRequest request) async {
  // 处理内部文章跳转逻辑
  if (request.url.startsWith('post://')) {
    final postLink = Uri.decodeFull(request.url.substring(7));
    updatePostContent(postLink);
    return NavigationDecision.prevent;
  }
  // 允许YouTube和Google Ads相关链接在WebView内加载
  else if (request.url.contains('youtube.com') || 
           request.url.contains('youtu.be') ||
           // Google Ads核心关联域名
           request.url.contains('googleadservices.com') ||
           request.url.contains('doubleclick.net') ||
           request.url.contains('googlesyndication.com') ||
           request.url.contains('google.com/ads')) {
    return NavigationDecision.navigate;
  }
  // 其他外部链接仍通过外部浏览器打开
  else if (await canLaunchUrl(Uri.parse(request.url))) {
    await launchUrl(Uri.parse(request.url), mode: LaunchMode.externalApplication);
    return NavigationDecision.prevent;
  }
  return NavigationDecision.navigate;
},

额外说明

  1. 若广告仍存在自动跳转情况,可通过浏览器开发者工具抓取广告实际请求的URL,将对应域名补充到白名单中。
  2. 保持javascriptMode: JavascriptMode.unrestricted配置,广告依赖JavaScript实现正常加载与交互。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:03:28