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.
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;