我正在尝试创建一个应用程序,该应用程序使用WebView2 WPF组件。目前我正在处理通过 console.log()
写入的网站 JavaScript 代码的消息和错误日志记录。
这是我当前拥有的:
public partial class WebView2BrowserControl : WebView2
{
private async void OnWebViewLoaded(object sender, RoutedEventArgs e)
{
await EnsureCoreWebView2Async();
if (showDeveloperTools)
{
CoreWebView2.GetDevToolsProtocolEventReceiver("Log.entryAdded").DevToolsProtocolEventReceived += OnConsoleMessage;
CoreWebView2.OpenDevToolsWindow();
}
else
{
CoreWebView2.Settings.AreDevToolsEnabled = false;
}
}
private void OnConsoleMessage(object sender, CoreWebView2DevToolsProtocolEventReceivedEventArgs e)
{
if (e != null && e.ParameterObjectAsJson != null)
{
Trace.WriteLine("WebView2:" + e.ParameterObjectAsJson);
}
}
}
如您所见,我正在使用GetDevToolsProtocolEventReceiver方法订阅DevTools中的事件。文档中说明如下:
eventName:String - 事件的完整名称,格式为 {domain}.{event}。 有关 DevToolsProtocol 事件描述和事件参数的更多信息,请转到 DevTools Protocol Viewer。
... 根据 DevTools 协议查看器,我要查找的事件是Log.entryAdded。
现在的问题是,虽然调用GetDevToolsProtocolEventReceiver("Log.entryAdded")
没有抛出任何异常,但该事件从未被触发,即使我可以在DevTools中看到正在记录的内容。我甚至尝试在 DevTools 窗口中编写自己的 console.log()
调用。
其他我尝试过的事情:
- 使用安装 WebView2 的 Evergreen Standalone Installer 或 Fixed Version(87 和 88 版本均可,后者基本上是一个便携版的 WebView2)
- 使用来自 NuGet 的最新稳定版本的 Microsoft.Web.View2.Core.dll,即 1.0.705.50 和最新的预发布版本
- 同时使用 Log.entryAdded事件和 Console.messageAdded(已弃用)
- 在打开 DevTools 窗口后订阅事件
所以我错在哪里了?