0

如果我运行window.open("url")它将在新的弹出窗口中打开 url ,即使它是 Edge WebView2。它只有默认的 Windows 标题栏和只读 url 栏。我需要在新的弹出窗口中通过window.open("url").

有什么方法可以从我的程序访问该窗口,直到原始 WebView2 子窗口?通过访问我的意思是注入脚本,并在注入后获得 js-response。

或者,至少,也许有办法用一些预先注入的脚本打开 url,比如window.open("http://google.com -javascript: alert(5)")


更新

找到MSDN 文章,可能这就是我需要的。试图理解这一点。

4

1 回答 1

2

是的,该ICoreWebView2::add_NewWindowRequested事件允许您拦截打开新窗口的 WebView2。

如果您在事件处理程序中什么都不做,或者不订阅该事件,您将得到一个像您描述的那样的新弹出窗口。在脚本中,返回值window.open连接到新打开的弹出窗口。但是在您的本机代码中,您无法访问或控制新打开的窗口。

或者您可以在 NewWindowRequested 事件的参数上将Handled属性设置为 true,并且不会创建新窗口。如果您想阻止打开窗口或者要将新窗口打开发送到默认浏览器或其他地方,这很有用。在脚本中,返回值为window.opennull。

NewWindow或者您可以通过属性提供您自己的 ICoreWebView2 。在这种情况下,您负责并选择如何以某种方式托管 ICoreWebView2。您作为 NewWindow 提供的 ICoreWebView2 将成为新窗口导航的目标,并通过脚本连接到调用的返回值window.open

因为获取新的 WebView2 可能需要异步方法调用,所以可以使用事件 args 上的 GetDeferral 方法来停止窗口请求事件的完成,直到稍后异步调用延迟上的 Complete。

您可以在我们的示例应用程序中看到该事件的工作示例。add_NewWindowRequested

于 2020-10-13T17:40:29.913 回答