Skip to content

Commit cc81322

Browse files
authored
Merge pull request #72 from mlipok/patch-1
Update BETA NetWebView2Lib.au3
2 parents 5bba4b6 + d723cbd commit cc81322

23 files changed

Lines changed: 4216 additions & 297 deletions

NetWebView2Lib.au3

Lines changed: 122 additions & 90 deletions
Large diffs are not rendered by default.

examples/001-BasicDemo.au3

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@
99
#include <WindowsConstants.au3>
1010
#include "..\NetWebView2Lib.au3"
1111

12-
; ==============================================================================
13-
; WebView2 Multi-Channel Presentation Script
14-
; ==============================================================================
15-
1612
Main()
1713

1814
Func Main()
@@ -35,9 +31,9 @@ Func Main()
3531
Local $oJSBridge = _NetWebView2_GetBridge($oWebV2M, "_BridgeMyEventsHandler_")
3632
If @error Then Return SetError(@error, @extended, $oWebV2M)
3733

38-
Local $sProfileDirectory = @TempDir & "\NetWebView2Lib-UserDataFolder"
34+
Local $sProfileDirectory = @ScriptDir & "\NetWebView2Lib-UserDataFolder"
3935
_NetWebView2_Initialize($oWebV2M, $hGUI, $sProfileDirectory, 0, 0, 0, 0, True, True, True, 1.2, "0x2B2B2B")
40-
__NetWebView2_Log(@ScriptLineNumber, "After: _NetWebView2_Initialize()", 1)
36+
__Example_Log(@ScriptLineNumber, "After: _NetWebView2_Initialize()")
4137

4238
; navigate to HTML string - full fill the object with your own offline content - without downloading any content
4339
_NetWebView2_NavigateToString($oWebV2M, __GetDemoHTML())
@@ -56,9 +52,9 @@ Func Main()
5652
MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 'Watch Point - AFTER:' & @CRLF & 'navigate to fake/broken url')
5753

5854
; navigate to fake not ex url
59-
__NetWebView2_Log(@ScriptLineNumber, "Before: https://w2ww.microsoft.com", 1)
55+
__Example_Log(@ScriptLineNumber, "Before: https://w2ww.microsoft.com")
6056
_NetWebView2_Navigate($oWebV2M, 'https://w2ww.microsoft.com', $NETWEBVIEW2_MESSAGE__TITLE_CHANGED, 5 * 1000)
61-
__NetWebView2_Log(@ScriptLineNumber, "After: https://w2ww.microsoft.com", 1)
57+
__Example_Log(@ScriptLineNumber, "After: https://w2ww.microsoft.com")
6258
MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 'Watch Point - AFTER:' & @CRLF & 'navigate to fake/broken url' & @CRLF & 'HostNameNotResolved')
6359

6460
; Main Loop
@@ -71,7 +67,8 @@ Func Main()
7167

7268
GUIDelete($hGUI)
7369

74-
_NetWebView2_CleanUp($oWebV2M)
70+
71+
_NetWebView2_CleanUp($oWebV2M, $oJSBridge)
7572
EndFunc ;==>Main
7673

7774
; ==============================================================================
@@ -125,3 +122,8 @@ Func __GetDemoHTML()
125122
'</body></html>'
126123
Return $sH
127124
EndFunc ;==>__GetDemoHTML
125+
126+
Func __Example_Log($s_ScriptLineNumber, $sString, $iError = @error, $iExtended = @extended)
127+
ConsoleWrite(@ScriptName & ' SLN=' & $s_ScriptLineNumber & ' [' & $iError & '/' & $iExtended & '] ::: ' & $sString & @CRLF)
128+
Return SetError($iError, $iExtended, '')
129+
EndFunc ;==>__Example_Log

examples/002-Html_Gui.au3

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,17 @@
1313
; Global variables for data management
1414
Global $aMessages[0][3]
1515
Global $sFilePath = @ScriptDir & "\messages.csv"
16-
Global $hGUI, $oWebV2M, $oBridge, $idBlue, $idRed
16+
Global $idBlue, $idRed
1717

18-
Main()
18+
_Example()
1919

20-
Func Main()
20+
Func _Example()
2121

22-
_Show_Form()
22+
Local $oWebV2M, $oBridge
23+
_Create_Form($oWebV2M, $oBridge)
24+
If @error Then Return SetError(@error, @extended, '')
2325

24-
; Main Application Loop
26+
; main Application Loop
2527
While 1
2628
Switch GUIGetMsg()
2729
Case $GUI_EVENT_CLOSE
@@ -39,12 +41,12 @@ Func Main()
3941
EndSwitch
4042
WEnd
4143

42-
_NetWebView2_CleanUp($oWebV2M)
43-
EndFunc ;==>Main
44+
_NetWebView2_CleanUp($oWebV2M, $oBridge)
45+
EndFunc ;==>_Example
4446

45-
Func _Show_Form()
47+
Func _Create_Form(ByRef $oWebV2M, ByRef $oBridge)
4648
; Create GUI with resizing support
47-
$hGUI = GUICreate("WebView2 Theme Switcher", 450, 460)
49+
Local $hGUI = GUICreate("WebView2 Theme Switcher", 450, 460)
4850
GUISetBkColor(0x1E1E1E)
4951

5052
$idBlue = GUICtrlCreateLabel("Blue Theme", 10, 10, 100, 30)
@@ -58,27 +60,29 @@ Func _Show_Form()
5860
GUICtrlSetColor(-1, 0xFF0000)
5961

6062
; Create WebView2 Manager object and register events
61-
$oWebV2M = _NetWebView2_CreateManager("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0", "__MyEVENTS_Manager_", "")
63+
$oWebV2M = _NetWebView2_CreateManager("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0", "", "")
64+
If @error Then Return SetError(@error, @extended, '')
6265

6366
; initialize browser - put it on the GUI
64-
Local $sProfileDirectory = @TempDir & "\NetWebView2Lib-UserDataFolder"
67+
Local $sProfileDirectory = @ScriptDir & "\NetWebView2Lib-UserDataFolder"
6568
_NetWebView2_Initialize($oWebV2M, $hGUI, $sProfileDirectory, 0, 30, 450, 430, True, False, False, 1.1)
69+
If @error Then Return SetError(@error, @extended, '')
6670

6771
$oWebV2M.IsZoomControlEnabled = False
6872

6973
; Create bridge object and register events
7074
$oBridge = _NetWebView2_GetBridge($oWebV2M, "__MyEVENTS_Bridge_")
75+
#forceref $oBridge
7176

7277
Local $sHTML = "<html><head><meta charset='UTF-8'><style>:" & __FormCSS() & "</style></head><body>" & __FormHTML() & "</body></html>"
7378
$oWebV2M.NavigateToString($sHTML)
7479
GUISetState(@SW_SHOW, $hGUI)
75-
76-
EndFunc ;==>_Show_Form
80+
EndFunc ;==>_Create_Form
7781

7882
; Handles data received from the JavaScript 'postMessage'
79-
Func __MyEVENTS_Bridge_OnMessageReceived($oWebV2M, $hGUI, $sMessage)
80-
#forceref $oWebV2M, $hGUI
81-
ConsoleWrite("$sMessage=" & $sMessage & @CRLF)
83+
Func __MyEVENTS_Bridge_OnMessageReceived($oWebV2M, $hGUI, $sMessage) ; fork from __NetWebView2_JSEvents__OnMessageReceived()
84+
#forceref $hGUI
85+
__Example_Log(@ScriptLineNumber, "$sMessage=" & $sMessage)
8286

8387
; Check for the specific form submission prefix
8488
If StringLeft($sMessage, 12) = "SUBMIT_FORM:" Then
@@ -106,10 +110,10 @@ Func __MyEVENTS_Bridge_OnMessageReceived($oWebV2M, $hGUI, $sMessage)
106110
FileClose($hFile)
107111
EndIf
108112

109-
ShowWebNotification("Data Saved Successfully!")
113+
ShowWebNotification($oWebV2M, "Data Saved Successfully!")
110114
Else
111115
; Trigger a visual notification inside the WebView
112-
ShowWebNotification("Please enter valid data", '#d70000')
116+
ShowWebNotification($oWebV2M, "Please enter valid data", '#d70000')
113117
EndIf
114118
EndIf
115119
EndIf
@@ -197,7 +201,7 @@ Func __FormHTML()
197201
EndFunc ;==>__FormHTML
198202

199203
; Injects a temporary notification box into the web page
200-
Func ShowWebNotification($sMessage, $sBgColor = "#4CAF50", $iDuration = 3000)
204+
Func ShowWebNotification($oWebV2M, $sMessage, $sBgColor = "#4CAF50", $iDuration = 3000)
201205
; Local error handler for COM objects
202206
Local $oMyError = ObjEvent("AutoIt.Error", __HtmlGUI_ErrFunc)
203207
#forceref $oMyError
@@ -234,3 +238,8 @@ Func __HtmlGUI_ErrFunc($oError)
234238
@TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
235239
@TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
236240
EndFunc ;==>__HtmlGUI_ErrFunc
241+
242+
Func __Example_Log($s_ScriptLineNumber, $sString, $iError = @error, $iExtended = @extended)
243+
ConsoleWrite(@ScriptName & ' SLN=' & $s_ScriptLineNumber & ' [' & $iError & '/' & $iExtended & '] ::: ' & $sString & @CRLF)
244+
Return SetError($iError, $iExtended, '')
245+
EndFunc ;==>__Example_Log

examples/003-Multi-Basic.au3

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
#include <GUIConstantsEx.au3>
1010
#include "..\NetWebView2Lib.au3"
1111

12-
Main()
12+
_Main()
1313

14-
Func Main()
14+
Func _Main()
1515
; --- Main GUI Setup ---
1616
Local $hMainGUI = GUICreate("Multi-WebView2 v2.0.0 Standard", 1000, 600, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN))
1717
GUISetState(@SW_SHOW, $hMainGUI)
@@ -41,31 +41,17 @@ Func Main()
4141
; CleanUp
4242
_NetWebView2_CleanUp($oWeb_1, $oBridge_1)
4343
;~ _NetWebView2_CleanUp($oWeb_2, $oBridge_2)
44-
EndFunc ;==>Main
44+
EndFunc ;==>_Main
4545

4646
; ==============================================================================
4747
; UPDATED HELPERS
4848
; ==============================================================================
4949

50-
Func UpdateWebUI($oManager, $sElementId, $sNewText)
50+
Func _UpdateWebUI($oManager, $sElementId, $sNewText)
5151
If Not IsObj($oManager) Then Return
5252
Local $sJS = StringFormat("document.getElementById('%s').innerText = '%s';", $sElementId, $sNewText)
5353
_NetWebView2_ExecuteScript($oManager, $sJS, $NETWEBVIEW2_EXECUTEJS_MODE0_FIREANDFORGET)
54-
EndFunc ;==>UpdateWebUI
55-
56-
Func _NetWebView2_BrowserSetupWrapper($hOuterParentWindow, ByRef $oOuterWeb, $sEventPrefix, $sProfile, ByRef $oOuterBridge, ByRef $hInnerWebViewWindow, $iX, $iY, $iW, $iH, $s_AddBrowserArgs)
57-
$hInnerWebViewWindow = GUICreate("", $iW, $iH, $iX, $iY, $WS_CHILD, -1, $hOuterParentWindow)
58-
GUISetState(@SW_SHOW, $hInnerWebViewWindow)
59-
60-
$oOuterWeb = _NetWebView2_CreateManager("", $sEventPrefix & '_Manager__', $s_AddBrowserArgs)
61-
If @error Then Return SetError(@error, @extended, $oOuterWeb)
62-
63-
Local $Result = _NetWebView2_Initialize($oOuterWeb, $hInnerWebViewWindow, $sProfile, 0, 0, $iW, $iH)
64-
If @error Then Return SetError(@error, @extended, $Result)
65-
66-
$oOuterBridge = _NetWebView2_GetBridge($oOuterWeb, $sEventPrefix & "_Bridge__")
67-
If @error Then Return SetError(@error, @extended, $oOuterBridge)
68-
EndFunc ;==>_NetWebView2_BrowserSetupWrapper
54+
EndFunc ;==>_UpdateWebUI
6955

7056
Func _GetDemoHTML($sTitle)
7157
Return '<html><title>Simple GUI</title><head><style>' & _
@@ -86,36 +72,41 @@ EndFunc ;==>_GetDemoHTML
8672

8773
#Region ; USER DEFINED EVENTS HANDLER FUNCTION
8874
; BROWSER 1 - Manager Events
89-
Func __UserEventHandler_Web1__Manager__OnMessageReceived($oWebView, $hGUI, $sMsg)
90-
#forceref $hGUI
91-
ConsoleWrite("- [Browser 1]: " & (StringLen($sMsg) > 150 ? StringLeft($sMsg, 150) & "..." : $sMsg) & @CRLF)
75+
Func __UserEventHandler_Web1__Manager__OnMessageReceived($oWebView, $hWindow, $sMsg)
76+
#forceref $hWindow
77+
ConsoleWrite(">> [Browser 1]: " & (StringLen($sMsg) > 150 ? StringLeft($sMsg, 150) & "..." : $sMsg) & @CRLF)
9278
If $sMsg = "INIT_READY" Then
9379
_NetWebView2_ExecuteScript($oWebView, 'window.chrome.webview.postMessage(JSON.stringify({ "type": "COM_TEST", "status": "OK" }));', $NETWEBVIEW2_EXECUTEJS_MODE0_FIREANDFORGET)
9480
EndIf
9581
EndFunc ;==>__UserEventHandler_Web1__Manager__OnMessageReceived
9682

9783
; BROWSER 1 - JavaScript Bridge Events
98-
Func __UserEventHandler_Web1__Bridge__OnMessageReceived($oWebView, $hGUI, $sMsg)
84+
Func __UserEventHandler_Web1__Bridge__OnMessageReceived($oWebView, $hWindow, $sMsg)
9985
Local Static $iMsgCnt = -1
10086
ConsoleWrite(">> [JS 1]: " & (StringLen($sMsg) > 150 ? StringLeft($sMsg, 150) & "..." : $sMsg) & @CRLF)
10187

10288
If $sMsg = "CLOSE_APP" Then
103-
If MsgBox(36, "Confirm", "Close this Browser Instance?", 0, $hGUI) = 6 Then
89+
If MsgBox(36, "Confirm", "Close this Browser Instance?", 0, $hWindow) = 6 Then
10490
$oWebView.Cleanup()
105-
GUIDelete($hGUI)
91+
GUIDelete($hWindow)
10692
ConsoleWrite("!> Browser 1 has been shut down." & @CRLF)
10793
EndIf
10894
Else
10995
$iMsgCnt += 1
110-
UpdateWebUI($oWebView, "mainTitle", "Counter: " & $iMsgCnt)
111-
UpdateWebUI($oWebView, "statusMsg", "Last Message: " & $sMsg)
96+
_UpdateWebUI($oWebView, "mainTitle", "Counter: " & $iMsgCnt)
97+
_UpdateWebUI($oWebView, "statusMsg", "Last Message: " & $sMsg)
98+
If $sMsg = "PING" Then
99+
GUISetState(@SW_HIDE, $hWindow)
100+
Sleep(200)
101+
GUISetState(@SW_SHOW, $hWindow)
102+
EndIf
112103
EndIf
113104
EndFunc ;==>__UserEventHandler_Web1__Bridge__OnMessageReceived
114105

115106
; BROWSER 2 - Manager Events
116-
Func __UserEventHandler_Web2__Manager__OnMessageReceived($oWebView, $hGUI, $sMsg)
117-
#forceref $hGUI
118-
ConsoleWrite("- [Browser 2]: " & (StringLen($sMsg) > 150 ? StringLeft($sMsg, 150) & "..." : $sMsg) & @CRLF)
107+
Func __UserEventHandler_Web2__Manager__OnMessageReceived($oWebView, $hWindow, $sMsg)
108+
#forceref $hWindow
109+
ConsoleWrite(">> [Browser 2]: " & (StringLen($sMsg) > 150 ? StringLeft($sMsg, 150) & "..." : $sMsg) & @CRLF)
119110
If $sMsg = "INIT_READY" Then
120111
_NetWebView2_ExecuteScript($oWebView, 'window.chrome.webview.postMessage(JSON.stringify({ "type": "COM_TEST", "status": "OK" }));', $NETWEBVIEW2_EXECUTEJS_MODE0_FIREANDFORGET)
121112
EndIf
@@ -134,8 +125,13 @@ Func __UserEventHandler_Web2__Bridge__OnMessageReceived($oWebView, $hWindow, $sM
134125
EndIf
135126
Else
136127
$iMsgCnt += 1
137-
UpdateWebUI($oWebView, "mainTitle", "Counter: " & $iMsgCnt)
138-
UpdateWebUI($oWebView, "statusMsg", "Last Message: " & $sMsg)
128+
_UpdateWebUI($oWebView, "mainTitle", "Counter: " & $iMsgCnt)
129+
_UpdateWebUI($oWebView, "statusMsg", "Last Message: " & $sMsg)
130+
If $sMsg = "PING" Then
131+
GUISetState(@SW_HIDE, $hWindow)
132+
Sleep(200)
133+
GUISetState(@SW_SHOW, $hWindow)
134+
EndIf
139135
EndIf
140136
EndFunc ;==>__UserEventHandler_Web2__Bridge__OnMessageReceived
141137
#EndRegion ; USER DEFINED EVENTS HANDLER FUNCTION

examples/004-FileViewerDemo.au3

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -31,40 +31,33 @@
3131

3232
#include "..\NetWebView2Lib.au3"
3333

34-
; ==============================================================================
35-
; WebView2 Multi-Channel Presentation Script^
36-
; ==============================================================================
34+
Global $idLabelStatus
3735

38-
; Global objects
36+
_Example()
3937

40-
; GUI & Controls
41-
Global $hGUI, $idLabelStatus
42-
43-
Main()
44-
45-
Func Main()
38+
Func _Example()
4639
Local $oMyError = ObjEvent("AutoIt.Error", __NetWebView2_COMErrFunc)
4740
#forceref $oMyError
4841

4942
; Create the UI
5043
Local $iHeight = 800
51-
$hGUI = GUICreate("WebView2 .NET Manager - Demo: " & @ScriptName, 1100, $iHeight, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN))
44+
Local $hGUI = GUICreate("WebView2 .NET Manager - Demo: " & @ScriptName, 1100, $iHeight, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN))
5245
$idLabelStatus = GUICtrlCreateLabel("Status: Initializing Engine...", 10, $iHeight - 20, 880, 20)
5346
GUICtrlSetFont(-1, 9, 400, 0, "Segoe UI")
5447

5548
; Initialize WebView2 Manager and register events
5649
Local $oWebV2M = _NetWebView2_CreateManager("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0", "", "--mute-audio")
5750
If @error Then Return SetError(@error, @extended, $oWebV2M)
5851

59-
;~ ; Initialize JavaScript Bridge
52+
;~ ; Initialize JavaScript Bridge ; not needed in this example
6053
;~ Local $oJSBridge = _NetWebView2_GetBridge($oWebV2M)
6154
;~ If @error Then Return SetError(@error, @extended, $oWebV2M)
6255

63-
Local $sProfileDirectory = @TempDir & "\..\UserDataFolder"
56+
Local $sProfileDirectory = @ScriptDir & "\NetWebView2Lib-UserDataFolder"
6457
_NetWebView2_Initialize($oWebV2M, $hGUI, $sProfileDirectory, 0, 0, 0, $iHeight - 20, True, True, True, 1.2, "0x2B2B2B")
6558

6659
GUISetState(@SW_SHOW, $hGUI)
67-
WinSetOnTop($hGUI, '', True)
60+
WinSetOnTop($hGUI, '', $WINDOWS_ONTOP)
6861

6962
Local $s_PDF_FileFullPath
7063

@@ -93,27 +86,15 @@ Func Main()
9386
EndSwitch
9487
WEnd
9588

89+
Local $oJSBridge
90+
_NetWebView2_CleanUp($oWebV2M, $oJSBridge)
9691
GUIDelete($hGUI)
97-
98-
_NetWebView2_CleanUp($oWebV2M)
99-
EndFunc ;==>Main
100-
101-
Func _GetFirstChildWindowHWND($hWnd)
102-
Local $aData = _WinAPI_EnumChildWindows($hWnd)
103-
ConsoleWrite("! $aData[1][0] = " & $aData[1][0] & @CRLF)
104-
;~ _ArrayDisplay($aData, '_WinAPI_EnumChildWindows')
105-
106-
If Not @error And UBound($aData) Then Return $aData[1][0]
107-
108-
Return SetError(1, @extended, False)
109-
EndFunc ;==>_GetFirstChildWindowHWND
110-
92+
EndFunc ;==>_Example
11193

11294
Func __WebView2_freezer($hMainGUI_Window, $hWebView2_Window)
11395
Local $aPos = WinGetPos($hWebView2_Window)
11496

11597
Local $hPrev = GUISwitch($hMainGUI_Window)
116-
;~ Local $idPic = GUICtrlCreatePic('', $aPos[0], $aPos[1], $aPos[2], $aPos[3])
11798
Local $idPic = GUICtrlCreatePic('', 0, 0, $aPos[2], $aPos[3])
11899
Local $hPic = GUICtrlGetHandle($idPic)
119100
GUISwitch($hPrev)

0 commit comments

Comments
 (0)