2

比如说,我正在点击Flashscore网站上的一些网球比赛。弹出一个新窗口。我想在 WebView2 中捕获第二个窗口:

browser.CoreWebView2Ready += delegate
{ 
    browser.CoreWebView2.NewWindowRequested += OnNewWindowRequested;
};

private async void OnNewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e)
{
    var newWindow = e.NewWindow; //null
}

然而,newWindownull。同时,使用WindowFeatures,我可以获得新窗口的高度或宽度:

uint height = e.WindowFeatures.Height;
uint width = e.WindowFeatures.Width;

如何捕获对第二个窗口的引用?

4

1 回答 1

6

NewWindowRequested 事件可以让您取消打开新窗口或将窗口替换为您自己的窗口,但您不能让 WebView2 为您打开一个新窗口并获取对该新窗口的引用。

NewWindowRequested 事件场景:

  1. 在事件处理程序中不采取任何行动或不订阅。WebView2 将打开一个新窗口,其中包含不受最终开发人员控制的最小 UI。
  2. Handled事件 args 上的属性设置为true. 取消打开新窗口。如果window.open是创建新窗口的内容,则返回值为null.
  3. Handled事件 args 上的属性设置为true,并使用该Uri属性在用户的默认浏览器中打开 URI 或以其他方式处理 WebView2 之外的新窗口。
  4. Handled事件 args 上的属性设置为true,并将该NewWindow属性设置为您创建的新 CoreWebView2。如果window.open是创建新窗口的对象,则返回值是与您提供的 CoreWebView2 对应的新窗口对象。您可以通过从 CoreWebView2Environment 类创建一个新的 CoreWebView2 来获取新的 CoreWebView2,或者如果您在 WPF、WinForms 或 WinUI 中使用 WebView2 元素,则可以创建一个新的 WebView2 元素并使用其 CoreWebView2 属性。

您可以在我们的示例应用程序中看到一些使用NewWindowRequested 事件的示例

于 2020-12-03T19:06:53.520 回答