TTMSFNCEdgeBrowser and NewWindowRequested

procedure Form1.EdgeBrowser.NewWindowRequested(Sender: TObject;
var Params: TTMSFNCWebBrowserNewWindowRequestedParams);
begin
Params.Handled := True;
???
end;

I want the window to open in a tab of my window. How can I capture it?

M.K.

You can't capture the window itself, just the URL, so if you want to open an external browser, or a new tab in your application, then just launch the URL in a new instance of TTMSFNCWebBrowser.

The address in the pop-up window is "abaut:blank." The window pops up only to download the file to the disk. In WebView2, NewWindowRequested contains Set_NewWindow(const NewWindow: ICoreWebView2), but I don't see this option in TMS..

The solution I used.

var NewWindowRequestedEventHandle_rt: EventRegistrationToken;
...

TCoreWebView2NewWindowRequestedEventHandler = class(TInterfacedObject, ICoreWebView2NewWindowRequestedEventHandler)
  private
    FPopupBrowser: TTMSFNCEdgeWebBrowser;
  public
    constructor Create(APopupBrowser: TTMSFNCEdgeWebBrowser);
    function Invoke(sender: ICoreWebView2; args: ICoreWebView2NewWindowRequestedEventArgs): HRESULT; stdcall;
  end;

APopupBrowser is an additional, hidden browser.

function TCoreWebView2NewWindowRequestedEventHandler.Invoke(sender: ICoreWebView2;
  args: ICoreWebView2NewWindowRequestedEventArgs): HRESULT;
begin
  var w: ICoreWebView2;
  if (FPopupBrowser.GetWebBrowserInstance as ICoreWebView2Controller).get_CoreWebView2(w) = S_OK then
  begin
    // Key moment: We pass the hidden browser interface as the target for the new window.
    // This allows the script from "about:blank" to run in the background in wb_HiddenPopup.
    args.put_NewWindow(w);
  end;
  Result := S_OK;
end;
procedure TPZSign_Form.MainBrowserInitialized(Sender: TObject);
begin
  var w: ICoreWebView2;
  if (MainBrowser.GetWebBrowserInstance as ICoreWebView2Controller).get_CoreWebView2(w) = S_OK then
    w.add_NewWindowRequested(TCoreWebView2NewWindowRequestedEventHandler.Create(wb_HiddenPopup), @FCoreWebView2NewWindowRequestedEventHandler_RT);
end;
procedure TPZSign_Form.FormCreate(Sender: TObject);
begin
  // === CREATING A HIDDEN BROWSER ===
  wb_HiddenPopup := TTMSFNCEdgeWebBrowser.Create(Self);
  wb_HiddenPopup.Parent := Self; // Musi mieć rodzica, żeby się zainicjalizować
  wb_HiddenPopup.Visible := False; // Ale nie musi być widoczna
  wb_HiddenPopup.Align := alNone;
  wb_HiddenPopup.Width := 0;
  wb_HiddenPopup.Height := 0;

 // We hook up download events 
  wb_HiddenPopup.OnDownloadStarted := wb_PZSignDownloadStarted;
  wb_HiddenPopup.OnDownloadStateChanged:= MainBrowserDownloadStateChanged;
  // ===============================================
end;
procedure TPZSign_Form.FormDestroy(Sender: TObject);
begin
  if FCoreWebView2NewWindowRequestedEventHandler_RT.Value<>0 then
  begin
    var w: ICoreWebView2;
    if (MainBrowser.GetWebBrowserInstance as ICoreWebView2Controller).get_CoreWebView2(w) = S_OK then
      w.remove_NewWindowRequested(FCoreWebView2NewWindowRequestedEventHandler_RT);
  end;
end;