這幾天分享一了關於 Edge WebView2 的應用,這時候有同事問我如何處理開新視窗之後的處理
他必須要模擬點擊,但是該連結為 _blank ,他必須要處理點擊後的視窗,在預設中的確會開啟一個新的視窗長這樣..
今天目標就是我們在設計一個新的 Form (NewlinkForm) 裡面一樣放一個 Edge WebView2 然後讓視窗點超連結後,都是繼續給 NewlinkForm 來處理
1. 參考這篇文章將 Edge
WebView2 設定好
2.開一個新得 Form 這邊取名為 NewlinkForm 下面是原始碼基本上就是,透過 Ctor 串入一個網址,並且在 Edge WebView 2Init 好之後載入網址
using Microsoft.Web.WebView2.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TestWebView2
{
public partial class NewlinkForm : Form
{
public string Url { get; set; }
public NewlinkForm(string url)
{
InitializeComponent();
Url = url;
webView21.EnsureCoreWebView2Async();
webView21.CoreWebView2InitializationCompleted += WebView21_CoreWebView2InitializationCompleted;
}
private void CoreWebView2_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e)
{
//自動開啟 DevTools
webView21.CoreWebView2.OpenDevToolsWindow();
}
private void WebView21_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{
webView21.CoreWebView2.Navigate(Url);
//在 Init 後加入,不然容易出錯
webView21.CoreWebView2.NavigationCompleted += CoreWebView2_NavigationCompleted;
}
private void NewlinkForm_Load(object sender, EventArgs e)
{
}
}
}
這裡面,我還加上了入如果網頁載入完成我會自動打開 DevTools
3. 回到第一個視窗,我們在處理點擊 Link 後的事件 主要是在 CoreWebView2InitializationCompleted 後加入 NewWindowRequested 的事件
如果不是在 CoreWebView2InitializationCompleted 後加入事件有可能會出錯 ,我在 StackOverflow 上面看到蠻多的
public Form1()
{
InitializeComponent();
webView21.EnsureCoreWebView2Async();
webView21.CoreWebView2InitializationCompleted += WebView21_CoreWebView2InitializationCompleted;
webView21.NavigationCompleted += WebView21_NavigationCompleted;
}
private async void WebView21_NavigationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationCompletedEventArgs e)
{
}
private void WebView21_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{
MessageBox.Show("Init Already");
webView21.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested1;
}
private void CoreWebView2_NewWindowRequested1(object sender, CoreWebView2NewWindowRequestedEventArgs e)
{
//default:false
//改成 true 原本的webview2 就不會有反應,而是交給下面的程式碼來處理
e.Handled = true;
//自己做的新視窗,以方便掌控之後的新點開的網站處理
var newSelBrowser = new NewlinkForm(e.Uri.ToString());
newSelBrowser.Show();
}
結果:

今天筆記到這邊,希望有幫助到需要的人。
reference:
https://learn.microsoft.com/zh-tw/uwp/api/windows.ui.xaml.controls.webview.newwindowrequested?view=winrt-22621