當我們進行頁面跳轉的時候,有的時候回使用新窗口打開,WebView2會彈出一個有默認樣式的新窗口,而這往往不是我們所想要的效果。
要重載這一行為,實現在自定義的窗口中承載新的web頁面,需要我們處理CoreWebView2.NewWindowRequested事件。
await webView.EnsureCoreWebView2Async();
webView.CoreWebView2.NewWindowRequested += OnNewWindowRequested;
事件處理方式如下:
var deferral = e.GetDeferral();
e.NewWindow = webView.CoreWebView2;
deferral.Complete();
簡單的來說有如下三步:
-
獲取Deferral對象
-
將EventArgs.NewWindow的引用賦為新的CoreWebView控件
-
調用Deferral.Coimplete函數
我這里是將新窗口在當前頁面中打開,實現類似多tab頁的瀏覽器。則需要新建webview2控件,此時需要注意等待初始化完成,並且新的webview2控件同樣要增加NewWindowRequested的處理:
var deferral = e.GetDeferral(); //需要同步獲取,不要異步等待后再獲取
await webView.EnsureCoreWebView2Async();
e.NewWindow = webView.CoreWebView2;
deferral.Complete();