我想知道是否有阻止 webview2 组件以 win 形式打开浏览器窗口的方法
我到处找,但找不到,但我确实找到了,但它使用了 XAML/UWP
一页使用了xaml,但代码不起作用,因为它的XAML和我使用c#
要阻止链接在新窗口中打开,请CoreWebView2_NewWindowRequested
按照您的发现订阅。
为此,最简单的方法是订阅第CoreWebView2InitializationCompleted
一个。
在WebView2
控件的属性窗口中,双击CoreWebView2InitializationCompleted
- 这将自动生成事件处理程序:
现在添加CoreWebView2_NewWindowRequested
事件处理程序并设置e.NewWindow
为当前的CoreWebView2
.
这是代码(假设您的WebView2
控件被调用webView21
):
private void WebView21_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{
webView21.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
}
private void CoreWebView2_NewWindowRequested(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs e)
{
e.NewWindow = webView21.CoreWebView2;
}
现在链接在同一个窗口(您的WebView2
控件)中打开。
为了补充@Poul Bak的答案,我在VB.Net中遇到了这个确切的问题,但所有答案都是针对C#的,所以如果其他人需要,我会在这里发布。
首先确保导入这个:
Imports Microsoft.Web.WebView2.Core
Imports Microsoft.Web.WebView2.WinForms
然后添加这 2 个事件,只需将 wVBrowser 替换为您的 Webview2 控件名称。
Private Sub wVBrowser_CoreWebView2InitializationCompleted(sender As Object, e As CoreWebView2InitializationCompletedEventArgs) Handles wVBrowser.CoreWebView2InitializationCompleted
AddHandler wVBrowser.CoreWebView2.NewWindowRequested, AddressOf CoreWebView2_NewWindowRequested
End Sub
Private Sub CoreWebView2_NewWindowRequested(ByVal sender As Object, ByVal e As Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs)
e.Handled = True
End Sub
我尝试了上面提到的 Poul Bak 它对我有用,可能是您的活动订阅位置可能是错误的,请尝试如下。
在 CoreWebView2 初始化后订阅 NewWindowRequested 事件。
例如:
public Form1()
{
InitializeComponent();
//https://docs.microsoft.com/en-us/microsoft-edge/webview2/get-started/winforms
InitializeAsync();
}
async void InitializeAsync()
{
await webView.EnsureCoreWebView2Async(null);
webView.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
}
private void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e)
{
e.NewWindow = webView.CoreWebView2;
}
快乐编码... !!!!