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

Delphi 11.3 FMX.TWebBrowser安卓访问谷歌地图同意页循环问题

Android下FMX TWebBrowser加载谷歌地图Cookie同意页后循环重定向问题

问题分析

使用FMX框架的TWebBrowser(设置为EdgeIfAvailable模式)访问https://www.google.de/maps时,首次加载会正常跳转到Cookie同意页,但在Android设备上点击「接受」或「拒绝」后,页面会陷入同意页反复加载的循环。临时解决方案是通过应用内按钮跳转至谷歌地图的其他随机地址,此时可正常进入地图页面——这说明Cookie已被正确设置,问题出在同意页的重定向环节。

当前论坛提到的shouldOverrideUrlLoading标准实现(如下)无法解决问题,因为它仅通知加载事件并返回False让WebView自行处理,未针对谷歌地图的重定向逻辑做适配:

function TAndroidWebBrowserService.TWebBrowserListener.shouldOverrideUrlLoading(view: JWebView; url: JString): Boolean;
begin
  FWBService.ShouldStartLoading(JStringToString(url));
  Result := False;
end;

解决方案

1. 重写shouldOverrideUrlLoading处理重定向

修改该方法,手动识别并处理谷歌地图的Cookie同意页重定向,确保跳转时携带已设置的Cookie:

function TAndroidWebBrowserService.TWebBrowserListener.shouldOverrideUrlLoading(view: JWebView; url: JString): Boolean;
var
  SUrl: string;
begin
  SUrl := JStringToString(url);
  // 检测是否为谷歌Cookie同意页的重定向链接
  if Pos('consent.google.com', SUrl) > 0 then
  begin
    // 手动加载谷歌地图主页,确保Cookie被正确携带
    view.loadUrl(StringToJString('https://www.google.de/maps'));
    Result := True; // 告知WebView由我们处理该URL
  end
  else
  begin
    FWBService.ShouldStartLoading(SUrl);
    Result := False; // 其他URL交给WebView默认处理
  end;
end;

2. 提前配置WebView的Cookie策略

在TWebBrowser初始化时,确保WebView允许存储第三方Cookie(谷歌地图依赖此设置):

procedure TYourForm.FormCreate(Sender: TObject);
var
  WebView: JWebView;
  CookieManager: JCookieManager;
begin
  if TOSVersion.Platform = pfAndroid then
  begin
    WebView := TAndroidWebBrowserService(WebBrowser1.Service).WebView;
    CookieManager := TJCookieManager.JavaClass.getInstance;
    // 启用Cookie存储
    CookieManager.setAcceptCookie(True);
    // Android 5.0及以上允许第三方Cookie
    if TOSVersion.Check(5) then
      CookieManager.setAcceptThirdPartyCookies(WebView, True);
  end;
end;

3. 直接使用带Cookie同意参数的URL

构造跳过同意页的谷歌地图URL(参数可能随谷歌策略调整,需测试验证):

https://www.google.de/maps?hl=de&gl=DE&cookie=1

问题根源

并非Android WebView对HTTP 302/303状态码的原生处理存在错误,而是谷歌地图Cookie同意页的重定向逻辑与FMX封装的TWebBrowser默认行为不兼容:点击同意/拒绝后,WebView发起的重定向请求未正确携带刚设置的Cookie,导致服务器再次返回同意页。临时方案有效是因为跳转其他地址时,WebView已携带了之前保存的Cookie,服务器验证通过后允许进入地图页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:30:17