Decode web message result like RunScript() result

This commit is contained in:
Tobias Taschner
2021-02-26 21:37:23 +01:00
parent 71f745e647
commit a09713de5f

View File

@@ -319,15 +319,31 @@ HRESULT wxWebViewEdgeImpl::OnContainsFullScreenElementChanged(ICoreWebView2* WXU
return S_OK;
}
HRESULT wxWebViewEdgeImpl::OnWebMessageReceived(ICoreWebView2* WXUNUSED(sender), ICoreWebView2WebMessageReceivedEventArgs* args)
HRESULT
wxWebViewEdgeImpl::OnWebMessageReceived(ICoreWebView2* WXUNUSED(sender),
ICoreWebView2WebMessageReceivedEventArgs* args)
{
wxCoTaskMemPtr<wchar_t> msgContent;
HRESULT hr = args->get_WebMessageAsJson(&msgContent);
if (FAILED(hr))
{
wxLogApiError("get_WebMessageAsJson", hr);
return hr;
}
wxWebViewEvent event(wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED, m_ctrl->GetId(),
m_ctrl->GetCurrentURL(), wxString());
event.SetEventObject(m_ctrl);
if (SUCCEEDED(args->get_WebMessageAsJson(&msgContent)))
event.SetString(wxString(msgContent));
// Try to decode JSON string or return original
// result if it's not a valid JSON string
wxString msgStr;
wxString msgJson(msgContent);
if (!wxJSON::DecodeString(msgJson, &msgStr))
msgStr = msgJson;
event.SetString(msgStr);
m_ctrl->HandleWindowEvent(event);
return S_OK;