我在该webview中添加了选项卡控件,让我们考虑一下wv1,我在这个webview上打开一个pop链接,这个弹出链接将在新选项卡和新webview2上打开。
单击下面引用img 在运行代码wv1 on tab2映像后,尝试它按钮弹出链接将在新选项卡内的新webview2上打开
代码:
namespace WindowsBrowserApplication
{
public partial class WindowsWebView : Form
{
public WindowsWebView()
{
InitializeComponent();
}
private void WindowsWebView_Load(object sender, EventArgs e)
{
InitBrowser();
}
private async Task Initizated()
{
await WebView.EnsureCoreWebView2Async(null);
}
public async void InitBrowser()
{
await Initizated();
WebView.CoreWebView2.Navigate("https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open");
WebView.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
}
public async void InitBrowserTab()
{
await Initizated();
}
private void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e)
{
e.Handled = true;
InitBrowserTab();
TabPage tpage = new TabPage();
var web = new WebView2();
tpage.Controls.Add(web);
tabControl.TabPages.Add(tpage);
}
}
}
发布于 2022-09-24 23:52:20
让它像真正的浏览器一样工作怎么样?简单地说,在一个新的Tab中打开。仅用几行代码;)
首先,创建一个从WebView2继承并在其中包含TabControl字段的新类:
internal class WebViewInTab:WebView2
{
TabControl tabCtrl;
public WebViewInTab(TabControl tabCtrl) :base()
{
Dock = DockStyle.Fill; // necessary for showing
this.tabCtrl = tabCtrl; // for adding new TabPage controls
CoreWebView2InitializationCompleted += WebViewInTab_CoreWebView2InitializationCompleted;
然后,您将在每次引发CoreWebView2.NewWindowRequested事件时使用这个自定义webview2创建新的webview2对象。因此,要处理这个事件:
private void WebViewInTab_CoreWebView2InitializationCompleted(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{
CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested; // This is the man
CoreWebView2.DocumentTitleChanged += CoreWebView2_DocumentTitleChanged; // Just cosmetic code
}
之后,您将自己处理新窗口,即只需将一个新的TabPage控件与我们的自定义webview2添加到TabControl TabPages集合中即可。当然,不要忘记处理程序arg中的Uri。
private void CoreWebView2_NewWindowRequested(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs e)
{
e.Handled = true; // let the default new window
TabPage tpage = new TabPage(); // boy
tpage.Controls.Add(new WebViewInTab(tabCtrl) { Source = new Uri(e.Uri)}); // toy
tabCtrl.TabPages.Add(tpage); // daddy
tabCtrl.SelectedTab = tpage; // user expectation
}
//Just cosmetic code
private void CoreWebView2_DocumentTitleChanged(object? sender, object e)
{
int last = tabCtrl.TabPages.Count - 1;
tabCtrl.TabPages[last].Text = CoreWebView2.DocumentTitle
}
}
最后,:)在主app表单构造函数中启动recursion-ready操作。
public Form1()
{
InitializeComponent();
string uriAdd = "https://www.w3schools.com/";
tabControl1.TabPages[0].Controls.Add(new WebViewInTab(tabControl1) { Source = new Uri(uriAdd) });
}
https://stackoverflow.com/questions/73329442
复制相似问题