@@ -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 )
3844EndFunc ; ==>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