有的時候,我們需要實現一些更為高級的操作,以提供更個性化的功能。常用的注入JavaScript的方式已經不能滿足我們的要求,此時可以使用Chromium提供的更為高級的API——Chrome Dev Protocol。
關於Dev Protocol,我之前寫過幾篇文章介紹過:
簡單的來講,通過F12調出的DevTool里能實現的功能它都能實現,網上也有大量的文章介紹它,我這里就不重復介紹了。本文這里只是介紹下WebView2中使用DevProtocol的方式。
在WebView2中,我們可以和前面的文章中介紹的一樣,通過--remote-debugging-port參數開放調試端口,用websocket的方式來驅動。
var env = await CoreWebView2Environment
.CreateAsync(options:new CoreWebView2EnvironmentOptions(
"--remote-debugging-port=9222"));
await webView.EnsureCoreWebView2Async(env);
除此之外,WebView2也提供了無需通過WebSocket作為中介,直接訪問的方法:
CoreWebView2.CallDevToolsProtocolMethodAsync
- CoreWebView2.GetDevToolsProtocolEventReceiver
基本上從名稱中就可以看出使用方法,執行命令和注冊回調。一個簡單的示例如下:
await webView.CoreWebView2.CallDevToolsProtocolMethodAsync("Network.enable", "{}");
var eventRecieiver = webView.CoreWebView2.GetDevToolsProtocolEventReceiver("Network.requestWillBeSent");
eventRecieiver.DevToolsProtocolEventReceived += (s, e) =>
{
Console.WriteLine(e.ParameterObjectAsJson + "\n");
};
示例進行了兩步操作:1. 執行命令Network.enable,啟用Network事件回調,2. 注冊Network.requestWillBeSent回調,命令執行完后,再訪問任何頁面時,即可獲取當前發送的所有請求信息: