@@ -61,6 +61,10 @@ Global Enum _ ; $NETWEBVIEW2_MESSAGE__* are set by __NetWebView2_WebViewEvents__
6161 $NETWEBVIEW2_MESSAGE__COOKIES_ERROR , _
6262 $NETWEBVIEW2_MESSAGE__COOKIE_ADD_ERROR , _
6363 $NETWEBVIEW2_MESSAGE__BLOCKED_AD , _
64+ $NETWEBVIEW2_MESSAGE__DOWNLOAD_STARTING , _
65+ $NETWEBVIEW2_MESSAGE__DOWNLOAD_IN_PROGRESS , _
66+ $NETWEBVIEW2_MESSAGE__DOWNLOAD_INTERRUPTED , _
67+ $NETWEBVIEW2_MESSAGE__DOWNLOAD_COMPLETED , _
6468 $NETWEBVIEW2_MESSAGE___FAKE_COUNTER
6569
6670#Region ; NetWebView2Lib UDF - _NetWebView2_* core functions
@@ -142,7 +146,14 @@ Func _NetWebView2_CreateManager($sUserAgent = '', $s_fnEventPrefix = "", $s_AddB
142146 If @error Then __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & " Manager Creation ERROR" , 1 )
143147 If $sUserAgent Then $oWebV2M .SetUserAgent($sUserAgent )
144148 If $s_AddBrowserArgs Then $oWebV2M .AdditionalBrowserArguments = $s_AddBrowserArgs
145- If $s_fnEventPrefix Then $_g_sNetWebView2_User_WebViewEvents = $s_fnEventPrefix
149+ If $s_fnEventPrefix Then
150+ If $_g_sNetWebView2_User_WebViewEvents = ' __NetWebView2_WebViewEvents__' Then ; prevent Recursion
151+ __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & ' : Please do not use UDF defined prefix: "__NetWebView2_WebViewEvents__"' , 1 )
152+ $_g_sNetWebView2_User_WebViewEvents = ' '
153+ Else
154+ $_g_sNetWebView2_User_WebViewEvents = $s_fnEventPrefix
155+ EndIf
156+ EndIf
146157 ObjEvent ($oWebV2M , " __NetWebView2_WebViewEvents__" , " IWebViewEvents" )
147158 Return SetError (@error , @extended , $oWebV2M )
148159EndFunc ; ==>_NetWebView2_CreateManager
@@ -169,7 +180,14 @@ Func _NetWebView2_GetBridge(ByRef $oWebV2M, $s_fnEventPrefix = "")
169180 Local $oWebJS = $oWebV2M .GetBridge()
170181 If @error Then __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & " : Manager.GetBridge() ERROR" , 1 )
171182
172- If $s_fnEventPrefix Then $_g_sNetWebView2_User_JSEvents = $s_fnEventPrefix
183+ If $s_fnEventPrefix Then
184+ If $_g_sNetWebView2_User_JSEvents = ' __NetWebView2_JSEvents__' Then ; prevent Recursion
185+ __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & ' : Please do not use UDF defined prefix: "__NetWebView2_JSEvents__"' , 1 )
186+ $_g_sNetWebView2_User_JSEvents = ' '
187+ Else
188+ $_g_sNetWebView2_User_JSEvents = $s_fnEventPrefix
189+ EndIf
190+ EndIf
173191 ObjEvent ($oWebJS , " __NetWebView2_JSEvents__" , " IBridgeEvents" )
174192
175193 Return SetError (@error , @extended , $oWebJS )
@@ -727,7 +745,7 @@ EndFunc ;==>__Get_Core_Bridge_JS
727745; Link ..........:
728746; Example .......: No
729747; ===============================================================================================================================
730- Func __NetWebView2_COMErrFunc($oError ) ; COM Error Function used by COM Error Handler
748+ Func __NetWebView2_COMErrFunc(ByRef $oError ) ; COM Error Function used by COM Error Handler
731749 If @Compiled Then Return
732750 ConsoleWrite (" NetWebView2Lib UDF (" & $oError .scriptline & " ) : ==> COM Error intercepted !" & @CRLF & _
733751 @TAB & " err.number is: " & @TAB & @TAB & " 0x" & Hex ($oError .number ) & @CRLF & _
@@ -741,9 +759,8 @@ Func __NetWebView2_COMErrFunc($oError) ; COM Error Function used by COM Error Ha
741759 @TAB & " err.retcode is: " & @TAB & " 0x" & Hex ($oError .retcode) & @CRLF & @CRLF )
742760EndFunc ; ==>__NetWebView2_COMErrFunc
743761
744- ; Handles native WebView2 events
745762#TODO = > Func __NetWebView2_WebViewEvents__OnMessageReceived(ByRef $oWebV2M , $hGUI , $sMsg )
746- Func __NetWebView2_WebViewEvents__OnMessageReceived($sMsg )
763+ Func __NetWebView2_WebViewEvents__OnMessageReceived($sMsg ) ; Handles native WebView2 events
747764 Local Const $s_Prefix = " [WebViewEvents__OnMessageReceived]:"
748765 Local $oMyError = ObjEvent (" AutoIt.Error" , __NetWebView2_COMErrFunc) ; Local COM Error Handler
749766 #forceref $oMyError
@@ -762,12 +779,18 @@ Func __NetWebView2_WebViewEvents__OnMessageReceived($sMsg)
762779
763780 Switch $sCommand
764781 Case " WINDOW_RESIZED"
765- $aParts = StringSplit ($sData , " |" )
766- If $aParts [0 ] > = 2 Then
767- Local $iW = Int ($aParts [1 ]), $iH = Int ($aParts [2 ])
768- ; Filter minor resize glitches
769- If $iW > 50 And $iH > 50 Then __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & $iW & " x" & $iH , 1 )
782+ Local Static $sData_static = Null
783+ If $sData_static <> $sData Then
784+ $sData_static = $sData
785+ $aParts = StringSplit ($sData , " |" )
786+
787+ If $aParts [0 ] > = 2 Then
788+ Local $iW = Int ($aParts [1 ]), $iH = Int ($aParts [2 ])
789+ ; Filter minor resize glitches
790+ If $iW > 50 And $iH > 50 Then __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & ' WINDOW_RESIZED:' & $iW & " x" & $iH , 1 )
791+ EndIf
770792 EndIf
793+
771794 Case " NAV_STARTING"
772795 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & ' COMMAND:' & $sCommand , 1 )
773796 __NetWebView2_LastMessageReceived($NETWEBVIEW2_MESSAGE__NAV_STARTING )
@@ -889,6 +912,10 @@ Func __NetWebView2_WebViewEvents__OnMessageReceived($sMsg)
889912 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & ' COMMAND:' & $sCommand , 1 )
890913 __NetWebView2_LastMessageReceived($NETWEBVIEW2_MESSAGE__BLOCKED_AD )
891914
915+ Case " DOWNLOAD_STARTING"
916+ __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & ' COMMAND:' & $sCommand , 1 )
917+ __NetWebView2_LastMessageReceived($NETWEBVIEW2_MESSAGE__DOWNLOAD_STARTING )
918+
892919; ~ Case "*"
893920; ~ __NetWebView2_Log(@ScriptLineNumber, $s_Prefix & ' COMMAND:' & $sCommand, 1)
894921; ~ __NetWebView2_LastMessageReceived($NETWEBVIEW2_MESSAGE__*)
@@ -904,9 +931,8 @@ Func __NetWebView2_WebViewEvents__OnMessageReceived($sMsg)
904931
905932EndFunc ; ==>__NetWebView2_WebViewEvents__OnMessageReceived
906933
907- ; Handles custom messages from JavaScript (window.chrome.webview.postMessage)
908- #TODO = > Func __NetWebView2_JSEvents__OnMessageReceived(ByRef $oWebV2M , ByRef $oWebJS , $hGUI , $sMsg )
909- Func __NetWebView2_JSEvents__OnMessageReceived($sMsg )
934+ #TODO = > Func __NetWebView2_JSEvents__OnMessageReceived(ByRef $oWebV2M , $hGUI , ByRef $oWebJS , $hGUI , $sMsg )
935+ Func __NetWebView2_JSEvents__OnMessageReceived($sMsg ) ; Handles custom messages from JavaScript (window.chrome.webview.postMessage)
910936 Local Const $s_Prefix = " [JSEvents__OnMessageReceived]:"
911937 Local $oMyError = ObjEvent (" AutoIt.Error" , __NetWebView2_COMErrFunc) ; Local COM Error Handler
912938 #forceref $oMyError
@@ -973,51 +999,101 @@ Func __NetWebView2_JSEvents__OnMessageReceived($sMsg)
973999
9741000EndFunc ; ==>__NetWebView2_JSEvents__OnMessageReceived
9751001
1002+ #TODO = > Func __NetWebView2_WebViewEvents__OnBrowserGotFocus(ByRef $oWebV2M , $hGUI , $iReason )
9761003Func __NetWebView2_WebViewEvents__OnBrowserGotFocus($iReason )
9771004 Local Const $s_Prefix = " [WebViewEvents__OnBrowserGotFocus]: REASON: " & $iReason
9781005 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix , 1 )
9791006EndFunc ; ==>__NetWebView2_WebViewEvents__OnBrowserGotFocus
9801007
1008+ #TODO = > Func __NetWebView2_WebViewEvents__OnBrowserLostFocus(ByRef $oWebV2M , $hGUI , $iReason )
9811009Func __NetWebView2_WebViewEvents__OnBrowserLostFocus($iReason )
9821010 Local Const $s_Prefix = " [WebViewEvents__OnBrowserLostFocus]: REASON: " & $iReason
9831011 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix , 1 )
9841012EndFunc ; ==>__NetWebView2_WebViewEvents__OnBrowserLostFocus
9851013
1014+ #TODO = > Func __NetWebView2_WebViewEvents__OnZoomChanged(ByRef $oWebV2M , $hGUI , $iFactor )
9861015Func __NetWebView2_WebViewEvents__OnZoomChanged($iFactor )
9871016 Local Const $s_Prefix = " [WebViewEvents__OnZoomChanged]: FACTOR: " & $iFactor
9881017 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix , 1 )
9891018EndFunc ; ==>__NetWebView2_WebViewEvents__OnZoomChanged
9901019
991- Func __NetWebView2_WebViewEvents__OnURLChanged($sNewUrl )
992- Local Const $s_Prefix = " [WebViewEvents__OnURLChanged]: URL: " & $sNewUrl
1020+ #TODO = > Func __NetWebView2_WebViewEvents__OnURLChanged(ByRef $oWebV2M , $hGUI , $sURL )
1021+ Func __NetWebView2_WebViewEvents__OnURLChanged($sURL )
1022+ Local Const $s_Prefix = " [WebViewEvents__OnURLChanged]: URL: " & $sURL
9931023 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix , 1 )
9941024EndFunc ; ==>__NetWebView2_WebViewEvents__OnURLChanged
9951025
996- Func __NetWebView2_WebViewEvents__OnTitleChanged($sNewTitle )
997- Local Const $s_Prefix = " [WebViewEvents__OnTitleChanged]: TITLE: " & $sNewTitle
1026+ #TODO = > Func __NetWebView2_WebViewEvents__OnTitleChanged(ByRef $oWebV2M , $hGUI , $sTITLE )
1027+ Func __NetWebView2_WebViewEvents__OnTitleChanged($sTITLE )
1028+ Local Const $s_Prefix = " [WebViewEvents__OnTitleChanged]: TITLE: " & $sTITLE
9981029 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix , 1 )
9991030EndFunc ; ==>__NetWebView2_WebViewEvents__OnTitleChanged
10001031
1001- Func __NetWebView2_WebViewEvents__OnNavigationStarting($sNewUrl )
1002- Local Const $s_Prefix = " [WebViewEvents__OnNavigationStarting]: URL: " & $sNewUrl
1032+ #TODO = > Func __NetWebView2_WebViewEvents__OnNavigationStarting(ByRef $oWebV2M , $hGUI , $sURL )
1033+ Func __NetWebView2_WebViewEvents__OnNavigationStarting($sURL )
1034+ Local Const $s_Prefix = " [WebViewEvents__OnNavigationStarting]: URL: " & $sURL
10031035 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix , 1 )
10041036EndFunc ; ==>__NetWebView2_WebViewEvents__OnNavigationStarting
10051037
1038+ #TODO = > Func __NetWebView2_WebViewEvents__OnNavigationCompleted(ByRef $oWebV2M , $hGUI , $bIsSuccess , $iWebErrorStatus )
10061039Func __NetWebView2_WebViewEvents__OnNavigationCompleted($bIsSuccess , $iWebErrorStatus )
10071040 Local Const $s_Prefix = " [WebViewEvents__OnNavigationCompleted]: IsSuccess: " & $bIsSuccess & " WebErrorStatus: " & $iWebErrorStatus
10081041 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix , 1 )
10091042EndFunc ; ==>__NetWebView2_WebViewEvents__OnNavigationCompleted
10101043
1011- #TODO = > Func __NetWebView2_WebViewEvents__OnContextMenuRequested(ByRef $oWebV2M , $sLink , $iX , $iY , $sSelection )
1044+ #TODO = > Func __NetWebView2_WebViewEvents__OnContextMenuRequested(ByRef $oWebV2M , $hGUI , $ sLink , $iX , $iY , $sSelection )
10121045Func __NetWebView2_WebViewEvents__OnContextMenuRequested($sLink , $iX , $iY , $sSelection )
10131046 Local Const $s_Prefix = " [WebViewEvents__OnContextMenuRequested]: LINK: " & $sLink & " X: " & $iX & " Y: " & $iY & " SELECTION: " & $sSelection
10141047 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix , 1 )
10151048EndFunc ; ==>__NetWebView2_WebViewEvents__OnContextMenuRequested
10161049
1050+ #TODO = > Func __NetWebView2_WebViewEvents__OnContextMenu(ByRef $oWebV2M , $hGUI , $sMenuData )
10171051Func __NetWebView2_WebViewEvents__OnContextMenu($sMenuData )
10181052 Local Const $s_Prefix = " [WebViewEvents__OnContextMenu]: MENUDATA: " & $sMenuData
10191053 __NetWebView2_Log(@ScriptLineNumber , $s_Prefix , 1 )
10201054EndFunc ; ==>__NetWebView2_WebViewEvents__OnContextMenu
1055+
1056+ #TODO = > Func __NetWebView2_WebViewEvents__OnDownloadStarting(ByRef $oWebV2M , $hGUI , $sUri , $sDefaultPath )
1057+ Func __NetWebView2_WebViewEvents__OnDownloadStarting($sUri , $sDefaultPath ) ; Listen for Manager OnDownloadStarting Events
1058+ ConsoleWrite (" -> [OnDownloadStarting]:: $sUri: " & $sUri & " , $sDefaultPath: " & $sDefaultPath & @CRLF )
1059+
1060+ ; --- STANDARD MODE (EDGE) ---
1061+ ; If you do nothing, Edge will download to the $sDefaultPath.
1062+ ; If you previously set $oWeb.SetDownloadPath("C:\MyFolder"), it will go there.
1063+
1064+ ; --- MANUAL MODE (BYPASS EDGE) ---
1065+ ; If you want to handle the download yourself with InetGet:
1066+ ; $oWeb.IsDownloadHandled = True
1067+ ; InetGet($sUri, @ScriptDir & "\Manual_Download.zip", 1, 1) ; 1 = wait for completion, 1 = force reload
1068+ ; ConsoleWrite("--> Edge download CANCELLED. AutoIt is handling it via InetGet." & @CRLF)
1069+
1070+ ConsoleWrite (" <- OnDownloadStarting event finished. Standard Edge download proceeds unless IsDownloadHandled=True." & @CRLF )
1071+ EndFunc ; ==>__NetWebView2_WebViewEvents__OnDownloadStarting
1072+
1073+ #TODO = > Func __NetWebView2_WebViewEvents__OnDownloadStateChanged(ByRef $oWebV2M , $hGUI , $sState , $sUri , $iTotalBytes , $iReceivedBytes )
1074+ Func __NetWebView2_WebViewEvents__OnDownloadStateChanged($sState , $sUri , $iTotal_Bytes , $iReceived_Bytes ) ; Listen for Manager OnDownloadStateChanged Events
1075+ Local Const $s_Prefix = " [WebViewEvents__OnDownloadStateChanged]: State: " & $sState & " Uri: " & $sUri & " Total_Bytes: " & $iTotal_Bytes & " Received_Bytes: " & $iReceived_Bytes
1076+ Local $iPercent = 0
1077+ If $iTotal_Bytes > 0 Then $iPercent = Round (($iReceived_Bytes / $iTotal_Bytes ) * 100 )
1078+
1079+ ; Convert to MB for easy-to-read log
1080+ Local $iReceived_MegaBytes = Round ($iReceived_Bytes / 1024 / 1024 )
1081+ Local $iTotal_MegaBytes = Round ($iTotal_Bytes / 1024 / 1024 )
1082+
1083+ Local Const $s_Message = " " & $iPercent & " % (" & $iReceived_MegaBytes & " / " & $iTotal_MegaBytes & " Mega Bytes)"
1084+ Switch $sState
1085+ Case " InProgress"
1086+ __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & $s_Message , 1 )
1087+ __NetWebView2_LastMessageReceived($NETWEBVIEW2_MESSAGE__DOWNLOAD_IN_PROGRESS )
1088+ Case " Interrupted"
1089+ __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & $s_Message , 1 )
1090+ __NetWebView2_LastMessageReceived($NETWEBVIEW2_MESSAGE__DOWNLOAD_INTERRUPTED )
1091+ Case " Completed"
1092+ ConsoleWrite (" --> DOWNLOAD_COMPLETED: Finished: " & $sUri & @CRLF )
1093+ __NetWebView2_Log(@ScriptLineNumber , $s_Prefix & $s_Message , 1 )
1094+ __NetWebView2_LastMessageReceived($NETWEBVIEW2_MESSAGE__DOWNLOAD_COMPLETED )
1095+ EndSwitch
1096+ EndFunc ; ==>__NetWebView2_WebViewEvents__OnDownloadStateChanged
10211097#EndRegion ; NetWebView2Lib UDF - === EVENT HANDLERS ===
10221098
10231099
0 commit comments