interface ICoreWebView2DevToolsProtocolEventReceiver
interface ICoreWebView2DevToolsProtocolEventReceiver
: public IUnknown
A Receiver is created for a particular DevTools Protocol event and allows you to subscribe and unsubscribe from that event.
Summary
Members | Descriptions |
---|---|
add_DevToolsProtocolEventReceived | Adds an event handler for the DevToolsProtocolEventReceived event. |
remove_DevToolsProtocolEventReceived | Removes an event handler previously added with add_DevToolsProtocolEventReceived . |
Obtained from the WebView object using GetDevToolsProtocolEventReceiver
.
Applies to
Product | Introduced |
---|---|
WebView2 Win32 | 0.9.430 |
WebView2 Win32 Prerelease | 0.9.488 |
Members
add_DevToolsProtocolEventReceived
Adds an event handler for the DevToolsProtocolEventReceived
event.
public HRESULT add_DevToolsProtocolEventReceived(ICoreWebView2DevToolsProtocolEventReceivedEventHandler * eventHandler, EventRegistrationToken * token)
Subscribe to a DevToolsProtocol
event. The Invoke
method of the handler
runs whenever the corresponding DevToolsProtocol
event runs. Invoke
runs with an event args object containing the parameter object of the DevTools Protocol event as a JSON string.
// Prompt the user to name a CDP event, and then subscribe to that event.
void ScriptComponent::SubscribeToCdpEvent()
{
TextInputDialog dialog(
m_appWindow->GetMainWindow(),
L"Subscribe to CDP Event",
L"CDP event name:",
L"Enter the name of the CDP event to subscribe to.\r\n"
L"You may also have to call the \"enable\" method of the\r\n"
L"event's domain to receive events (for example \"Log.enable\").\r\n",
L"Log.entryAdded");
if (dialog.confirmed)
{
std::wstring eventName = dialog.input;
wil::com_ptr<ICoreWebView2DevToolsProtocolEventReceiver> receiver;
CHECK_FAILURE(
m_webView->GetDevToolsProtocolEventReceiver(eventName.c_str(), &receiver));
// If we are already subscribed to this event, unsubscribe first.
auto preexistingToken = m_devToolsProtocolEventReceivedTokenMap.find(eventName);
if (preexistingToken != m_devToolsProtocolEventReceivedTokenMap.end())
{
CHECK_FAILURE(receiver->remove_DevToolsProtocolEventReceived(
preexistingToken->second));
}
CHECK_FAILURE(receiver->add_DevToolsProtocolEventReceived(
Callback<ICoreWebView2DevToolsProtocolEventReceivedEventHandler>(
[this, eventName](
ICoreWebView2* sender,
ICoreWebView2DevToolsProtocolEventReceivedEventArgs* args) -> HRESULT
{
wil::unique_cotaskmem_string parameterObjectAsJson;
CHECK_FAILURE(args->get_ParameterObjectAsJson(¶meterObjectAsJson));
std::wstring title = eventName;
std::wstring details = parameterObjectAsJson.get();
wil::com_ptr<ICoreWebView2DevToolsProtocolEventReceivedEventArgs2> args2;
if (SUCCEEDED(args->QueryInterface(IID_PPV_ARGS(&args2))))
{
wil::unique_cotaskmem_string sessionId;
CHECK_FAILURE(args2->get_SessionId(&sessionId));
if (sessionId.get() && *sessionId.get())
{
title = eventName + L" (session:" + sessionId.get() + L")";
std::wstring targetId = m_devToolsSessionMap[sessionId.get()];
std::wstring targetLabel = m_devToolsTargetLabelMap[targetId];
details = L"From " + targetLabel + L" (session:" + sessionId.get() +
L")\r\n" + details;
}
}
m_appWindow->AsyncMessageBox(details, L"CDP Event Fired: " + title);
return S_OK;
})
.Get(),
&m_devToolsProtocolEventReceivedTokenMap[eventName]));
}
}
remove_DevToolsProtocolEventReceived
Removes an event handler previously added with add_DevToolsProtocolEventReceived
.
public HRESULT remove_DevToolsProtocolEventReceived(EventRegistrationToken token)