解决 DCEF3 在 BeforePopup 事件中打开新窗体的问题

此问题的解决方案从 https://groups.google.com/forum/#!topic/delphichromiumembedded/xzshOr-pjnU 获得。

procedure TBrowser.ChromiumBrowserBeforePopup(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame; const targetUrl,
  targetFrameName: ustring; var popupFeatures: TCefPopupFeatures;
  var windowInfo: TCefWindowInfo; var client: ICefClient;
  var settings: TCefBrowserSettings; var noJavascriptAccess: Boolean;
  out Result: Boolean);
begin
  if targetUrl = 'about:blank' then
  begin
    Result := false
  end
  else
  begin
    //ChromiumBrowser.Load(targetUrl);
    PopupUrl := targetUrl;
    SendMessage(Self.Handle, WM_COMMAND, $EF3A, 0);
    Result := true;
  end;
end;

声明一个事件用于接收消息。

procedure CatchPopup(var msg: TMessage); message WM_COMMAND;
procedure TBrowser.CatchPopup(var msg: TMessage);
begin
  if Msg.Msg = WM_COMMAND then
  begin
    if Msg.WParam = $EF3A then
    begin
      Framework.CreateTab(2, PopupUrl);
    end;
  end;
end;
原文地址:https://www.cnblogs.com/xiefang2008/p/5535222.html