在WPF WebView2控件中,我想window.open("https://www.google.com")
从主窗口执行,以使用来在子窗口中打开URL CoreWebView2_NewWindowRequested
。但是URL网页没有显示在子窗口实例中。
我不太确定下面的代码有什么问题:
MainWindow.xaml.cs
private async void btnOpenPopup_Click(object sender, RoutedEventArgs e)
{
await MainWebView2Instance.ExecuteScriptAsync("openPopup()");
}
private async void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e)
{
Microsoft.Web.WebView2.Core.CoreWebView2Deferral deferral = e.GetDeferral();
MainWindow childWindow = new MainWindow();
childWindow.Title = "Child Window";
//Creating a new webview2 instance for the child window
WebView2 childWebView2Instance = new WebView2();
await childWebView2Instance.EnsureCoreWebView2Async(null);
childWebView2Instance.Source = new Uri(e.Uri);
childWindow.dockPanel.Children.Add(childWebView2Instance);
e.Handled = true;
deferral.Complete();
childWindow.Show();
}
HTML页面中的JavaScript
<script type="text/javascript">
function openPopup() {
window.open("https://www.google.com ");
}
</script>
注释掉(或删除)以下行:
await childWebView2Instance.EnsureCoreWebView2Async(null);
-阻塞了。您没有使用CoreWebView2Environment
,因此不需要使用。将的Source属性设置childWebView2Instance
为时,它将隐式初始化CoreWebView2。
更新:
当单击网页上的链接时,以下代码将打开一个子窗口,其中网页的HTML如下:
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
</head>
<script>
function popuponclick()
{
my_window = window.open("https://www.google.com");
}
</script>
<body>
<div>
<a href="javascript: popuponclick()">Open Popup Window</A>
</div>
</body>
</html>
MainWindow.xaml
...
<wv2:WebView2
Name="webView21"
CoreWebView2InitializationCompleted="webView21_CoreWebView2InitializationCompleted"
Source="http://127.0.0.1:80/index.html"/>
...
webView21_CoreWebView2InitializationCompleted(MainWindow.xaml.cs)
private void webView21_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{
System.Diagnostics.Debug.WriteLine(this.Title + " - webView21_CoreWebView2InitializationCompleted");
webView21.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
}
将using语句添加到MainWindow.xaml.cs中:
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.Wpf;
在中MainWindow.xaml.cs
,添加另一个构造函数,该构造函数可用于设置WebView2控件的Source属性。它应如下所示:
构造函数:(MainWindow.xaml.cs)
...
public MainWindow()
{
InitializeComponent();
}
public MainWindow(string url)
{
InitializeComponent();
webView21.Source = new Uri(url);
}
...
CoreWebView2_NewWindowRequested(MainWindow.xaml.cs)
private void CoreWebView2_NewWindowRequested(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NewWindowRequestedEventArgs e)
{
CoreWebView2 cwv2 = (CoreWebView2)sender;
Microsoft.Web.WebView2.Core.CoreWebView2Deferral deferral = e.GetDeferral();
MainWindow childWindow = null;
childWindow = new MainWindow(e.Uri);
childWindow.Title = "Child Window";
childWindow.Show();
e.Handled = true;
deferral.Complete();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句