Skip to content

Commit b4d8628

Browse files
authored
Update 003-Multi-Basic.au3
1 parent 8a15c6e commit b4d8628

1 file changed

Lines changed: 80 additions & 75 deletions

File tree

examples/003-Multi-Basic.au3

Lines changed: 80 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,19 @@ Func Main()
1616
Local $hMainGUI = GUICreate("Multi-WebView2 v2.0.0 Standard", 1000, 600, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN))
1717
GUISetState(@SW_SHOW, $hMainGUI)
1818

19-
; --- BROWSER 1 ---
20-
Local $oWeb1, $hCont1, $oBridge1
21-
_Browser_Setup($hMainGUI, "Web1_", @TempDir & "\User_A", 10, 10, 480, 500, $oWeb1, $hCont1, $oBridge1)
22-
23-
; --- BROWSER 2 ---
24-
Local $oWeb2, $hCont2, $oBridge2
25-
_Browser_Setup($hMainGUI, "Web2_", @TempDir & "\User_B", 510, 10, 480, 500, $oWeb2, $hCont2, $oBridge2)
19+
ConsoleWrite("! --- BROWSER 1 ---" & @CRLF)
20+
Local $oWeb_1, $oBridge_1, $h_WebWindow_1, $sEventPrfix_1 = "__UserEventHandler_Web1_", $sProfile_1 = @TempDir & "\User_A", $s_AddBrowserArgs_1 = ""
21+
_NetWebView2_BrowserSetupWrapper($hMainGUI, $oWeb_1, $sEventPrfix_1, $sProfile_1, $oBridge_1, $h_WebWindow_1, 10, 10, 480, 500, $s_AddBrowserArgs_1)
22+
ConsoleWrite("! $h_WebWindow_1 = " & $h_WebWindow_1 & @CRLF)
23+
ConsoleWrite("! BrowserWindowHandle = " & $oWeb_1.BrowserWindowHandle & @CRLF)
24+
_NetWebView2_NavigateToString($oWeb_1, _GetDemoHTML("Browser 1 Content"))
25+
26+
ConsoleWrite("! --- BROWSER 2 ---" & @CRLF)
27+
Local $oWeb_2, $oBridge_2, $h_WebWindow_2, $sEventPrfix_2 = "__UserEventHandler_Web2_", $sProfile_2 = @TempDir & "\User_B", $s_AddBrowserArgs_2 = ""
28+
_NetWebView2_BrowserSetupWrapper($hMainGUI, $oWeb_2, $sEventPrfix_2, $sProfile_2, $oBridge_2, $h_WebWindow_2, 510, 10, 480, 500, $s_AddBrowserArgs_2)
29+
ConsoleWrite("! $h_WebWindow_2 = " & $h_WebWindow_2 & @CRLF)
30+
ConsoleWrite("! BrowserWindowHandle = " & $oWeb_2.BrowserWindowHandle & @CRLF)
31+
_NetWebView2_NavigateToString($oWeb_2, _GetDemoHTML("Browser 2 Content"))
2632

2733
; --- Main Loop ---
2834
While 1
@@ -33,104 +39,103 @@ Func Main()
3339
WEnd
3440

3541
; CleanUp
36-
_NetWebView2_CleanUp($oWeb1)
37-
_NetWebView2_CleanUp($oWeb2)
42+
_NetWebView2_CleanUp($oWeb_1, $oBridge_1)
43+
;~ _NetWebView2_CleanUp($oWeb_2, $oBridge_2)
3844
EndFunc ;==>Main
3945

46+
; ==============================================================================
47+
; UPDATED HELPERS
48+
; ==============================================================================
49+
50+
Func UpdateWebUI($oManager, $sElementId, $sNewText)
51+
If Not IsObj($oManager) Then Return
52+
Local $sJS = StringFormat("document.getElementById('%s').innerText = '%s';", $sElementId, $sNewText)
53+
_NetWebView2_ExecuteScript($oManager, $sJS)
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)
4062

41-
; --- BROWSER 1 ---
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
69+
70+
Func _GetDemoHTML($sTitle)
71+
Return '<html><title>Simple GUI</title><head><style>' & _
72+
'body { font-family: "Segoe UI", sans-serif; background: #1a1a1a; color: white; padding: 20px; text-align: center; }' & _
73+
'.card { background: #2d2d2d; padding: 20px; border-radius: 12px; border: 1px solid #444; box-shadow: 0 4px 8px rgba(0,0,0,0.5); }' & _
74+
'button { padding: 10px 20px; cursor: pointer; background: #0078d4; color: white; border: none; border-radius: 5px; margin: 10px 5px; }' & _
75+
'button:hover { background: #005a9e; }' & _
76+
'h1 { color: #60cdff; }' & _
77+
'</style></head><body>' & _
78+
'<div class="card">' & _
79+
' <h1>' & $sTitle & '</h1>' & _
80+
' <h2 id="mainTitle">Waiting...</h2>' & _
81+
' <p id="statusMsg">Ready for communication.</p>' & _
82+
' <button onclick="window.chrome.webview.postMessage(''PING'')">Send Ping</button>' & _
83+
' <button onclick="window.chrome.webview.postMessage(''CLOSE_APP'')">Exit</button>' & _
84+
'</div></body></html>'
85+
EndFunc ;==>_GetDemoHTML
4286

43-
; Manager Events
44-
Func Web1_OnMessageReceived($oWebV2M, $hGUI, $sMsg)
87+
#Region ; USER DEFINED EVENTS HANDLER FUNCTION
88+
; BROWSER 1 - Manager Events
89+
Func __UserEventHandler_Web1__Manager__OnMessageReceived($oWebView2, $hGUI, $sMsg)
4590
#forceref $hGUI
46-
ConsoleWrite("+> [Browser 1]: " & (StringLen($sMsg) > 150 ? StringLeft($sMsg, 150) & "..." : $sMsg) & @CRLF)
91+
ConsoleWrite("- [Browser 1]: " & (StringLen($sMsg) > 150 ? StringLeft($sMsg, 150) & "..." : $sMsg) & @CRLF)
4792
If $sMsg = "INIT_READY" Then
48-
_NetWebView2_ExecuteScript($oWebV2M, 'window.chrome.webview.postMessage(JSON.stringify({ "type": "COM_TEST", "status": "OK" }));')
49-
_NetWebView2_NavigateToString($oWebV2M, _GetDemoHTML("Browser 1 Content"))
93+
_NetWebView2_ExecuteScript($oWebView2, 'window.chrome.webview.postMessage(JSON.stringify({ "type": "COM_TEST", "status": "OK" }));')
5094
EndIf
51-
EndFunc ;==>Web1_OnMessageReceived
95+
EndFunc ;==>__UserEventHandler_Web1__OnMessageReceived
5296

53-
; JavaScript Bridge Events
54-
Func Web1_Bridge_OnMessageReceived($oWebV2M, $hGUI, $sMsg)
97+
; BROWSER 1 - JavaScript Bridge Events
98+
Func __UserEventHandler_Web1__Bridge__OnMessageReceived($oWebView2, $hGUI, $sMsg)
5599
Local Static $iMsgCnt = -1
56100
ConsoleWrite(">> [JS 1]: " & (StringLen($sMsg) > 150 ? StringLeft($sMsg, 150) & "..." : $sMsg) & @CRLF)
57101

58102
If $sMsg = "CLOSE_APP" Then
59103
If MsgBox(36, "Confirm", "Close this Browser Instance?", 0, $hGUI) = 6 Then
60-
$oWebV2M.Cleanup()
104+
$oWebView2.Cleanup()
61105
GUIDelete($hGUI)
62106
ConsoleWrite("!> Browser 1 has been shut down." & @CRLF)
63107
EndIf
64108
Else
65109
$iMsgCnt += 1
66-
UpdateWebUI($oWebV2M, "mainTitle", "Counter: " & $iMsgCnt)
67-
UpdateWebUI($oWebV2M, "statusMsg", "Last Message: " & $sMsg)
110+
UpdateWebUI($oWebView2, "mainTitle", "Counter: " & $iMsgCnt)
111+
UpdateWebUI($oWebView2, "statusMsg", "Last Message: " & $sMsg)
68112
EndIf
69-
EndFunc ;==>Web1_Bridge_OnMessageReceived
70-
71-
72-
; --- BROWSER 2 ---
113+
EndFunc ;==>__UserEventHandler_Web1__Bridge_OnMessageReceived
73114

74-
; Manager Events
75-
Func Web2_OnMessageReceived($oWebV2M, $hGUI, $sMsg)
115+
; BROWSER 2 - Manager Events
116+
Func __UserEventHandler_Web2__Manager__OnMessageReceived($oWebView2, $hGUI, $sMsg)
76117
#forceref $hGUI
77-
ConsoleWrite("+> [Browser 2]: " & (StringLen($sMsg) > 150 ? StringLeft($sMsg, 150) & "..." : $sMsg) & @CRLF)
118+
ConsoleWrite("- [Browser 2]: " & (StringLen($sMsg) > 150 ? StringLeft($sMsg, 150) & "..." : $sMsg) & @CRLF)
78119
If $sMsg = "INIT_READY" Then
79-
_NetWebView2_ExecuteScript($oWebV2M, 'window.chrome.webview.postMessage(JSON.stringify({ "type": "COM_TEST", "status": "OK" }));')
80-
_NetWebView2_NavigateToString($oWebV2M, _GetDemoHTML("Browser 2 Content"))
120+
_NetWebView2_ExecuteScript($oWebView2, 'window.chrome.webview.postMessage(JSON.stringify({ "type": "COM_TEST", "status": "OK" }));')
81121
EndIf
82-
EndFunc ;==>Web2_OnMessageReceived
122+
EndFunc ;==>__UserEventHandler_Web2__OnMessageReceived
83123

84-
; JavaScript Bridge Events
85-
Func Web2_Bridge_OnMessageReceived($oWebV2M, $hGUI, $sMsg)
124+
; BROWSER 2 - JavaScript Bridge Events
125+
Func __UserEventHandler_Web2__Bridge__OnMessageReceived($oWebView2, $hWindow, $sMsg)
86126
Local Static $iMsgCnt = -1
87127
ConsoleWrite(">> [JS 2]: " & (StringLen($sMsg) > 150 ? StringLeft($sMsg, 150) & "..." : $sMsg) & @CRLF)
88128

89129
If $sMsg = "CLOSE_APP" Then
90-
If MsgBox(36, "Confirm", "Close this Browser Instance?", 0, $hGUI) = 6 Then
91-
$oWebV2M.Cleanup()
92-
GUIDelete($hGUI)
130+
If MsgBox(36, "Confirm", "Close this Browser Instance?", 0, $hWindow) = 6 Then
131+
$oWebView2.Cleanup()
132+
GUIDelete($hWindow)
93133
ConsoleWrite("!> Browser 2 has been shut down." & @CRLF)
94134
EndIf
95135
Else
96136
$iMsgCnt += 1
97-
UpdateWebUI($oWebV2M, "mainTitle", "Counter: " & $iMsgCnt)
98-
UpdateWebUI($oWebV2M, "statusMsg", "Last Message: " & $sMsg)
137+
UpdateWebUI($oWebView2, "mainTitle", "Counter: " & $iMsgCnt)
138+
UpdateWebUI($oWebView2, "statusMsg", "Last Message: " & $sMsg)
99139
EndIf
100-
EndFunc ;==>Web2_Bridge_OnMessageReceived
101-
; ==============================================================================
102-
; UPDATED HELPERS
103-
; ==============================================================================
104-
105-
Func UpdateWebUI($oManager, $sElementId, $sNewText)
106-
If Not IsObj($oManager) Then Return
107-
Local $sJS = StringFormat("document.getElementById('%s').innerText = '%s';", $sElementId, $sNewText)
108-
_NetWebView2_ExecuteScript($oManager, $sJS)
109-
EndFunc ;==>UpdateWebUI
110-
111-
Func _Browser_Setup($hParent, $sPrefix, $sProfile, $iX, $iY, $iW, $iH, ByRef $oOutWeb, ByRef $hOutCont, ByRef $oOutBridge)
112-
$hOutCont = GUICreate("", $iW, $iH, $iX, $iY, $WS_CHILD, -1, $hParent)
113-
GUISetState(@SW_SHOW, $hOutCont)
114-
115-
$oOutWeb = _NetWebView2_CreateManager("", $sPrefix, "")
116-
_NetWebView2_Initialize($oOutWeb, $hOutCont, $sProfile, 0, 0, $iW, $iH)
117-
118-
$oOutBridge = _NetWebView2_GetBridge($oOutWeb, $sPrefix & "Bridge_")
119-
EndFunc ;==>_Browser_Setup
120-
121-
Func _GetDemoHTML($sTitle)
122-
Return '<html><title>Simple GUI</title><head><style>' & _
123-
'body { font-family: "Segoe UI", sans-serif; background: #1a1a1a; color: white; padding: 20px; text-align: center; }' & _
124-
'.card { background: #2d2d2d; padding: 20px; border-radius: 12px; border: 1px solid #444; box-shadow: 0 4px 8px rgba(0,0,0,0.5); }' & _
125-
'button { padding: 10px 20px; cursor: pointer; background: #0078d4; color: white; border: none; border-radius: 5px; margin: 10px 5px; }' & _
126-
'button:hover { background: #005a9e; }' & _
127-
'h1 { color: #60cdff; }' & _
128-
'</style></head><body>' & _
129-
'<div class="card">' & _
130-
' <h1>' & $sTitle & '</h1>' & _
131-
' <h2 id="mainTitle">Waiting...</h2>' & _
132-
' <p id="statusMsg">Ready for communication.</p>' & _
133-
' <button onclick="window.chrome.webview.postMessage(''PING'')">Send Ping</button>' & _
134-
' <button onclick="window.chrome.webview.postMessage(''CLOSE_APP'')">Exit</button>' & _
135-
'</div></body></html>'
136-
EndFunc ;==>_GetDemoHTML
140+
EndFunc ;==>__UserEventHandler_Bridge_OnMessageReceived
141+
#EndRegion ; USER DEFINED EVENTS HANDLER FUNCTION

0 commit comments

Comments
 (0)