@@ -20,6 +20,13 @@ Global $_g_sNetWebView2_User_JSEvents = ""
2020Global $_g_sNetWebView2_User_WebViewEvents = " "
2121Global $_g_oWeb
2222
23+ Global Enum _
24+ $WEBVIEW2__NAVSTATUS__READY , _
25+ $WEBVIEW2__NAVSTATUS__STARTING , _
26+ $WEBVIEW2__NAVSTATUS__URL_CHANGED , _
27+ $WEBVIEW2__NAVSTATUS__COMPLETED , _
28+ $WEBVIEW2__NAVSTATUS__TITLE_CHANGED
29+
2330#Region ; NetWebView2Lib UDF - core function
2431Func _NetWebView2_StartUp($sDLLFileFullPath )
2532 #RegistrationFree is WorkInProgress
@@ -73,7 +80,7 @@ Func _NetWebView2_Initialize(ByRef $oWebV2M, $hGUI, $sProfileDirectory, $i_Left
7380 Local $iInit = $oWebV2M .Initialize(($hGUI ), $sProfileDirectory , $i_Left , $i_Top , $i_Width , $i_Height )
7481 If @error Then Return SetError (@error , @extended , $iInit )
7582
76- If $b_LoadWait Then _NetWebView2_LoadWait($oWebV2M )
83+ If $b_LoadWait Then _NetWebView2_LoadWait($oWebV2M , $WEBVIEW2__NAVSTATUS__READY )
7784 If @error Then Return SetError (@error , @extended , $iInit )
7885
7986 ; WebView2 Configuration
@@ -209,8 +216,10 @@ EndFunc ;==>_NetWebView2_CleanUp
209216; #FUNCTION# ====================================================================================================================
210217; Name ..........: _NetWebView2_LoadWait
211218; Description ...:
212- ; Syntax ........: _NetWebView2_LoadWait(ByRef $oWebV2M)
219+ ; Syntax ........: _NetWebView2_LoadWait(ByRef $oWebV2M, $iStatus)
220+ ; Syntax ........: _NetWebView2_LoadWait(ByRef $oWebV2M[, $iStatus = $WEBVIEW2__NAVSTATUS__READY])
213221; Parameters ....: $oWebV2M - [in/out] an object.
222+ ; $iStatus - [optional] an integer value. Default is $WEBVIEW2__NAVSTATUS__READY.
214223; Return values .: None
215224; Author ........: mLipok, ioa747
216225; Modified ......:
@@ -219,15 +228,21 @@ EndFunc ;==>_NetWebView2_CleanUp
219228; Link ..........:
220229; Example .......: No
221230; ===============================================================================================================================
222- Func _NetWebView2_LoadWait(ByRef $oWebV2M )
231+ Func _NetWebView2_LoadWait(ByRef $oWebV2M , $iStatus = $WEBVIEW2__NAVSTATUS__READY )
223232 Local $oMyError = ObjEvent (" AutoIt.Error" , __NetWebView2_COMErrFunc) ; Local COM Error Handler
224233 #forceref $oMyError
225234
226235 ; Wait for WebView2 to be ready
227236 While Sleep (10 )
228- If $oWebV2M .IsReady Then ExitLoop
229- If @error Then Return SetError (@error , @extended , - 1 )
237+ If $oWebV2M .IsReady Then
238+ If $iStatus == $WEBVIEW2__NAVSTATUS__READY Or _NetWebView2_NavigationStatus() > = $iStatus Then
239+ ExitLoop
240+ EndIf
241+ EndIf
242+ ; ~ If @error Then Return SetError(@error, @extended, -1)
230243 WEnd
244+ If $_g_bNetWebView2_DebugInfo Then ConsoleWrite (" ! After _NetWebView2_LoadWait(" & $iStatus & " ) ::: _NetWebView2_NavigationStatus()=" & _NetWebView2_NavigationStatus() & @CRLF )
245+ _NetWebView2_NavigationStatus($WEBVIEW2__NAVSTATUS__READY )
231246
232247EndFunc ; ==>_NetWebView2_LoadWait
233248
@@ -253,7 +268,7 @@ Func _NetWebView2_Navigate(ByRef $oWebV2M, $sURL, $b_LoadWait = True)
253268 Local $iNavigation = $oWebV2M .Navigate($sURL )
254269 If @error Then Return SetError (@error , @extended , $iNavigation )
255270
256- If $b_LoadWait Then _NetWebView2_LoadWait($oWebV2M )
271+ If $b_LoadWait Then _NetWebView2_LoadWait($oWebV2M , $WEBVIEW2__NAVSTATUS__TITLE_CHANGED )
257272 Return SetError (@error , @extended , ' ' )
258273EndFunc ; ==>_NetWebView2_Navigate
259274
@@ -276,12 +291,22 @@ Func _NetWebView2_NavigateToString(ByRef $oWebV2M, $s_HTML, $b_LoadWait = True)
276291 Local $oMyError = ObjEvent (" AutoIt.Error" , __NetWebView2_COMErrFunc) ; Local COM Error Handler
277292 #forceref $oMyError
278293
279- Local $iNavigation = $oWebV2M .NavigateToString($s_HTML )
294+ Local $iNavigation = $oWebV2M .NavigateToString($s_HTML , $WEBVIEW2__NAVSTATUS__TITLE_CHANGED )
280295 If @error Then Return SetError (@error , @extended , $iNavigation )
281296
282297 If $b_LoadWait Then _NetWebView2_LoadWait($oWebV2M )
283298 Return SetError (@error , @extended , ' ' )
284299EndFunc ; ==>_NetWebView2_NavigateToString
300+
301+ Func _NetWebView2_NavigationStatus($iStatus = Default , $iError = @error , $iExtended = @extended )
302+ Local Static $i_static = $WEBVIEW2__NAVSTATUS__READY
303+ If $iStatus = Default Then Return SetError ($iError , $iExtended , $i_static )
304+
305+ $i_static = $iStatus
306+ Return SetError ($iError , $iExtended , $i_static )
307+ EndFunc ; ==>_NetWebView2_NavigationStatus
308+
309+
285310#EndRegion ; NetWebView2Lib UDF - core function
286311
287312#Region ; NetWebView2Lib UDF - helper function
@@ -406,18 +431,23 @@ Func __NetWebView2_WebViewEvents__OnMessageReceived($sMsg)
406431 Switch $sCommand
407432 Case " INIT_READY"
408433 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & $sData , 1 )
409-
410- #QUESTION Why here ExecuteScript ?
411- $_g_oWeb .ExecuteScript(' window.chrome.webview.postMessage(JSON.stringify({ "type": "COM_TEST", "status": "OK" }));' )
434+ _NetWebView2_NavigationStatus($WEBVIEW2__NAVSTATUS__READY )
412435
413436 Case " NAV_STARTING"
414437 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & $sData , 1 )
438+ _NetWebView2_NavigationStatus($WEBVIEW2__NAVSTATUS__STARTING )
439+
440+ Case " URL_CHANGED"
441+ __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & " ?? " & $sData , 1 )
442+ _NetWebView2_NavigationStatus($WEBVIEW2__NAVSTATUS__URL_CHANGED )
415443
416444 Case " NAV_COMPLETED"
417445 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & " ?? " & $sData , 1 )
446+ _NetWebView2_NavigationStatus($WEBVIEW2__NAVSTATUS__COMPLETED )
418447
419448 Case " TITLE_CHANGED"
420449 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & $sData , 1 )
450+ _NetWebView2_NavigationStatus($WEBVIEW2__NAVSTATUS__TITLE_CHANGED )
421451 ; If you want to change the title of your GUI based on the page
422452; ~ If $aParts[0] > 1 Then WinSetTitle($hGUI, "", "WebView2 - " & $aParts[2])
423453
0 commit comments