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

Delphi Rio中TWebBrowser无法加载WooCommerce站点Cookie弹窗问题求助

解决Delphi Rio中TWebBrowser加载WooCommerce站点时的Cookie弹窗问题

核心原因

Delphi Rio的TWebBrowser默认调用系统IE内核,对现代JS/jQuery特性支持有限;而Delphi 11的Edge控件基于Chromium内核,兼容性更强,因此能正常加载站点。以下是针对性解决方案:

1. 强制TWebBrowser使用高版本IE兼容性模式

通过注册表配置,让TWebBrowser以IE11标准模式运行,提升对现代脚本的支持:

procedure SetIEEmulationMode;
var
  Reg: TRegistry;
  ExeName: string;
begin
  ExeName := ExtractFileName(Application.ExeName);
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION', True) then
    begin
      // 11001 = IE11标准模式,11000 = IE11兼容模式,按需选择
      Reg.WriteInteger(ExeName, 11001);
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
end;

在程序启动时(如FormCreate事件)调用该方法,需确保程序有注册表写入权限。

2. 自动执行JS脚本关闭Cookie弹窗

若兼容性调整后弹窗仍存在,可在页面加载完成后,通过TWebBrowser执行JS模拟点击同意按钮:

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
  HTMLDoc: IHTMLDocument2;
  ClickScript: string;
begin
  HTMLDoc := WebBrowser1.Document as IHTMLDocument2;
  if not Assigned(HTMLDoc) then Exit;

  // 针对https://merletdance.com/eshop的实际Cookie同意按钮选择器
  ClickScript := 'var acceptBtn = document.querySelector("#cookie_action_close_header"); if(acceptBtn) acceptBtn.click();';
  HTMLDoc.parentWindow.execScript(ClickScript, 'JavaScript');
end;

3. 替换为Chromium内核控件(长期解决方案)

如果频繁遇到IE内核兼容性问题,可在Delphi Rio中使用第三方Chromium控件(如CEF4Delphi),实现和Delphi 11 Edge控件一致的现代浏览器兼容性,从根源解决脚本兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:33:38