Disclosure Statement: This site contains affiliate links, which means that I may receive a commission if you make a purchase using these links. As an eBay Partner, I earn from qualifying purchases.
procedure TFrmBrowser.WVBrowser1FrameNavigationStarting(Sender: TObject;
const aWebView: ICoreWebView2;
const aArgs: ICoreWebView2NavigationStartingEventArgs);
var
ATempArgs : TCoreWebView2NavigationStartingEventArgs;
begin
ATempArgs := TCoreWebView2NavigationStartingEventArgs.Create( aArgs );
try
if Pos( 'MY_URI'.ToLower(), string(ATempArgs.URI).ToLower() ) > 0 then
FFrameMonitorar := ATempArgs.NavigationID;
finally
ATempArgs.Free;
end;
end;
procedure TFrmBrowser.WVBrowser1FrameNavigationCompleted ( Sender : TObject;
const aWebView : ICoreWebView2;
const aArgs : ICoreWebView2NavigationCompletedEventArgs ) ;
var
TempArgs : TCoreWebView2NavigationCompletedEventArgs;
begin
TempArgs := TCoreWebView2NavigationCompletedEventArgs.Create ( aArgs ) ;
try
if ( FFrameMonitorar > 0 ) and ( TempArgs.NavigationID = FFrameMonitorar ) then
begin
FFrameMonitorar := 0;
// do something
end;
finally
TempArgs.Free;
end;
end;
procedure TFrmBrowser.WVBrowser1NavigationStarting ( Sender : TObject;
const aWebView : ICoreWebView2;
const aArgs : ICoreWebView2NavigationStartingEventArgs ) ;
var
TempArgs : TCoreWebView2NavigationStartingEventArgs;
begin
TempArgs := TCoreWebView2NavigationStartingEventArgs.Create ( aArgs ) ;
try
if SameText ( 'MY_URI'.ToLower() , string(TempArgs.URI).ToLower() ) = True then
FNavegacaoMonitorar := TempArgs.NavigationID;
finally
TempArgs.Free;
end;
end;
procedure TFrmBrowser.WVBrowser1DOMContentLoaded ( Sender : TObject;
const aWebView : ICoreWebView2;
const aArgs : ICoreWebView2DOMContentLoadedEventArgs ) ;
var
TempArgs : TCoreWebView2DOMContentLoadedEventArgs;
begin
TempArgs := TCoreWebView2DOMContentLoadedEventArgs.Create ( aArgs ) ;
try
if TempArgs.NavigationId = FNavegacaoMonitorar then
begin
FNavegacaoMonitorar := 0;
// do something
end;
finally
TempArgs.Free;
end;
end;
It's not very elegant...
You're doing everything correctly. The WebView2 API exposes the NavigationID value to use the events exactly like you do.
giovani.erthal wrote: ↑Mon Apr 24, 2023 10:33 pm
How to execute a JS code in FrameNavigationCompleted event? aWebView.ExecuteScript has some extra parameters...
Call TWVBrowserBase.ExecuteScript with the JavaScript code and a custom "aExecutionID" value. This function is asynchronous and it triggers the TWVBrowserBase.OnExecuteScriptCompleted event when it finishes.
TWVBrowserBase.OnExecuteScriptCompleted will have the same aExecutionID value so you know which script triggered the OnExecuteScriptCompleted event.