You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF WebView2中CoreWebView2_NewWindowRequested处理window.open页面不显示问题排查

解决WPF WebView2中NewWindowRequested事件子窗口不加载目标网页的问题

我帮你排查了代码里的几个关键问题,这就是子窗口没显示目标网页的原因,下面是修正方案:

1. 先修复HTML里的URL格式问题

你JS代码里的window.open参数末尾多了个空格,这会导致WebView2解析到错误的URL,先把这个空格去掉:

<script type="text/javascript">
function openPopup() {
    window.open("https://www.google.com");
}
</script>

2. 修正NewWindowRequested事件的处理逻辑

你之前的写法没有遵循WebView2新窗口请求的标准处理流程,正确的做法是将我们创建的CoreWebView2实例绑定到事件参数的NewWindow属性,而不是手动设置Source。另外还要确保子窗口的WebView2控件能占满容器,避免因为尺寸问题看不到内容。

修改后的CoreWebView2_NewWindowRequested代码:

private async void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e)
{
    var deferral = e.GetDeferral();
    try
    {
        // 创建子窗口实例
        var childWindow = new MainWindow();
        childWindow.Title = "Child Window";
        
        // 创建子窗口的WebView2控件
        var childWebView2 = new WebView2();
        // 设置控件填充整个父容器
        childWebView2.HorizontalAlignment = HorizontalAlignment.Stretch;
        childWebView2.VerticalAlignment = VerticalAlignment.Stretch;
        childWindow.dockPanel.Children.Add(childWebView2);
        
        // 初始化CoreWebView2,并关联到事件的NewWindow属性
        await childWebView2.EnsureCoreWebView2Async(null);
        e.NewWindow = childWebView2.CoreWebView2;
        
        // 标记事件已处理,阻止默认弹窗行为
        e.Handled = true;
        
        childWindow.Show();
    }
    finally
    {
        // 确保延迟操作总是完成,避免资源泄漏
        deferral.Complete();
    }
}

额外优化:确保DockPanel能让WebView2占满窗口

如果你的MainWindow的dockPanel在XAML里没有设置LastChildFill="True",建议加上这个属性,这样WebView2会自动填满整个面板:

<DockPanel x:Name="dockPanel" LastChildFill="True">
    <!-- 你的其他控件 -->
</DockPanel>

关键修改点说明

  • 用e.NewWindow绑定CoreWebView2实例:这是WebView2处理新窗口请求的标准方式,它会自动将目标URL加载到这个实例中,不需要手动设置Source
  • 设置控件对齐方式:避免WebView2控件因为默认尺寸为0导致看不到内容
  • try-finally包裹延迟操作:确保无论是否出现异常,deferral.Complete()都会执行,防止资源泄漏

内容的提问来源于stack exchange,提问作者DotNetSpartan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:53:50