@@ -28,7 +28,7 @@ LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
28
28
static wil::com_ptr<ICoreWebView2Controller> webviewController;
29
29
30
30
// Pointer to WebView window
31
- static wil::com_ptr<ICoreWebView2> webviewWindow ;
31
+ static wil::com_ptr<ICoreWebView2> webview ;
32
32
33
33
int CALLBACK WinMain (
34
34
_In_ HINSTANCE hInstance,
@@ -116,67 +116,71 @@ int CALLBACK WinMain(
116
116
[hWnd](HRESULT result, ICoreWebView2Controller* controller) -> HRESULT {
117
117
if (controller != nullptr ) {
118
118
webviewController = controller;
119
- webviewController->get_CoreWebView2 (&webviewWindow );
119
+ webviewController->get_CoreWebView2 (&webview );
120
120
}
121
121
122
122
// Add a few settings for the webview
123
123
// The demo step is redundant since the values are the default settings
124
- ICoreWebView2Settings* Settings ;
125
- webviewWindow ->get_Settings (&Settings );
126
- Settings ->put_IsScriptEnabled (TRUE );
127
- Settings ->put_AreDefaultScriptDialogsEnabled (TRUE );
128
- Settings ->put_IsWebMessageEnabled (TRUE );
124
+ wil::com_ptr< ICoreWebView2Settings> settings ;
125
+ webview ->get_Settings (&settings );
126
+ settings ->put_IsScriptEnabled (TRUE );
127
+ settings ->put_AreDefaultScriptDialogsEnabled (TRUE );
128
+ settings ->put_IsWebMessageEnabled (TRUE );
129
129
130
130
// Resize WebView to fit the bounds of the parent window
131
131
RECT bounds;
132
132
GetClientRect (hWnd, &bounds);
133
133
webviewController->put_Bounds (bounds);
134
134
135
135
// Schedule an async task to navigate to Bing
136
- webviewWindow ->Navigate (L" https://www.bing.com/" );
136
+ webview ->Navigate (L" https://www.bing.com/" );
137
137
138
+ // <Step4>
138
139
// Step 4 - Navigation events
139
140
// register an ICoreWebView2NavigationStartingEventHandler to cancel any non-https navigation
140
141
EventRegistrationToken token;
141
- webviewWindow ->add_NavigationStarting (Callback<ICoreWebView2NavigationStartingEventHandler>(
142
+ webview ->add_NavigationStarting (Callback<ICoreWebView2NavigationStartingEventHandler>(
142
143
[](ICoreWebView2* webview, ICoreWebView2NavigationStartingEventArgs* args) -> HRESULT {
143
- PWSTR uri;
144
+ wil::unique_cotaskmem_string uri;
144
145
args->get_Uri (&uri);
145
- std::wstring source (uri);
146
+ std::wstring source (uri. get () );
146
147
if (source.substr (0 , 5 ) != L" https" ) {
147
148
args->put_Cancel (true );
148
149
}
149
- CoTaskMemFree (uri);
150
150
return S_OK;
151
151
}).Get (), &token);
152
+ // <Step4>
152
153
154
+ // <Step5>
153
155
// Step 5 - Scripting
154
156
// Schedule an async task to add initialization script that freezes the Object object
155
- webviewWindow ->AddScriptToExecuteOnDocumentCreated (L" Object.freeze(Object);" , nullptr );
157
+ webview ->AddScriptToExecuteOnDocumentCreated (L" Object.freeze(Object);" , nullptr );
156
158
// Schedule an async task to get the document URL
157
- webviewWindow ->ExecuteScript (L" window.document.URL;" , Callback<ICoreWebView2ExecuteScriptCompletedHandler>(
159
+ webview ->ExecuteScript (L" window.document.URL;" , Callback<ICoreWebView2ExecuteScriptCompletedHandler>(
158
160
[](HRESULT errorCode, LPCWSTR resultObjectAsJson) -> HRESULT {
159
161
LPCWSTR URL = resultObjectAsJson;
160
162
// doSomethingWithURL(URL);
161
163
return S_OK;
162
164
}).Get ());
165
+ // <Step5>
163
166
167
+ // <Step6>
164
168
// Step 6 - Communication between host and web content
165
169
// Set an event handler for the host to return received message back to the web content
166
- webviewWindow ->add_WebMessageReceived (Callback<ICoreWebView2WebMessageReceivedEventHandler>(
170
+ webview ->add_WebMessageReceived (Callback<ICoreWebView2WebMessageReceivedEventHandler>(
167
171
[](ICoreWebView2* webview, ICoreWebView2WebMessageReceivedEventArgs* args) -> HRESULT {
168
- PWSTR message;
172
+ wil::unique_cotaskmem_string message;
169
173
args->TryGetWebMessageAsString (&message);
170
174
// processMessage(&message);
171
- webview->PostWebMessageAsString (message);
172
- CoTaskMemFree (message);
175
+ webview->PostWebMessageAsString (message.get ());
173
176
return S_OK;
174
177
}).Get (), &token);
178
+ // <Step6>
175
179
176
180
// Schedule an async task to add initialization script that
177
181
// 1) Add an listener to print message from the host
178
182
// 2) Post document URL to the host
179
- webviewWindow ->AddScriptToExecuteOnDocumentCreated (
183
+ webview ->AddScriptToExecuteOnDocumentCreated (
180
184
L" window.chrome.webview.addEventListener(\' message\' , event => alert(event.data));" \
181
185
L" window.chrome.webview.postMessage(window.document.URL);" ,
182
186
nullptr );
0 commit comments