我正在尝试创建一个使用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中的事件。这些文件规定如下:
事件名称:String-事件的全名为{domain}.{ event }格式。有关DevToolsProtocol事件描述和事件args的详细信息,请导航到DevTools协议查看器。
...And与DevTools协议查看器对应,我正在寻找的事件是Log.entryAdded。
现在的问题是,虽然GetDevToolsProtocolEventReceiver("Log.entryAdded")调用不会抛出任何异常,但不会引发事件,即使我可以看到DevTools中记录的内容。我甚至尝试在DevTools窗口中编写自己的DevTools调用。
我尝试过的其他事情:
那我做错什么了?
发布于 2021-02-22 00:13:22
你快到了!
结果是,您必须启用协议事件,否则将调用而不是。
添加事件侦听器后,只需enable它,如下所示:
CoreWebView2.GetDevToolsProtocolEventReceiver("Log.entryAdded").DevToolsProtocolEventReceived += ConsoleMessage;
await CoreWebView2.CallDevToolsProtocolMethodAsync("Log.enable", "{}");现在您应该在跟踪中得到消息。
Alternative for Windows (在您在窗体上安装和删除WebView2之后):
private async void Form1_Load(object sender, EventArgs e)
{
await webView21.EnsureCoreWebView2Async();
}
private async void WebView21_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{
webView21.CoreWebView2.GetDevToolsProtocolEventReceiver("Log.entryAdded").DevToolsProtocolEventReceived += ConsoleMessage;
await webView21.CoreWebView2.CallDevToolsProtocolMethodAsync("Log.enable", "{}");
webView21.CoreWebView2.OpenDevToolsWindow();
webView21.CoreWebView2.Navigate("https://stackoverflow.com");
}
private void ConsoleMessage(object sender, Microsoft.Web.WebView2.Core.CoreWebView2DevToolsProtocolEventReceivedEventArgs e)
{
if (e != null && e.ParameterObjectAsJson != null)
{
Console.WriteLine("WebView2:" + e.ParameterObjectAsJson);
}
}发布于 2022-06-30 18:09:28
接受的答案对我没有用。
它正在使用日志域,以使其工作,这是铬日志消息。
我不得不使用运行时域,这允许我访问console.log。
主要代码:
async void InitializeAsync()
{
await webView.EnsureCoreWebView2Async(null);
DevToolsProtocolHelper helper = webView.CoreWebView2.GetDevToolsProtocolHelper();
await helper.Runtime.EnableAsync();
helper.Runtime.ConsoleAPICalled += Runtime_ConsoleAPICalled;
}
private void Runtime_ConsoleAPICalled(object sender, Runtime.ConsoleAPICalledEventArgs e)
{
String test = e.Args[0].Value.ToString();
Trace.WriteLine(test);
}https://stackoverflow.com/questions/66303305
复制相似问题