Add common web message identifier

This commit is contained in:
Tobias Taschner
2021-02-27 11:55:50 +01:00
parent c9606d7b5a
commit 29bfcdfd5e
4 changed files with 43 additions and 8 deletions

View File

@@ -420,8 +420,8 @@ HRESULT wxWebViewEdgeImpl::OnWebViewCreated(HRESULT result, ICoreWebView2Control
if (settings)
{
settings->put_IsStatusBarEnabled(false);
settings->put_IsWebMessageEnabled(!m_scriptMsgHandlerName.empty());
}
UpdateWebMessageHandler();
if (!m_pendingUserScripts.empty())
{
@@ -440,6 +440,24 @@ HRESULT wxWebViewEdgeImpl::OnWebViewCreated(HRESULT result, ICoreWebView2Control
return S_OK;
}
void wxWebViewEdgeImpl::UpdateWebMessageHandler()
{
wxCOMPtr<ICoreWebView2Settings> settings(GetSettings());
if (!settings)
return;
settings->put_IsWebMessageEnabled(!m_scriptMsgHandlerName.empty());
if (!m_scriptMsgHandlerName.empty())
{
// Make edge message handler available under common name
wxString js = wxString::Format("window.%s = window.chrome.webview;",
m_scriptMsgHandlerName);
m_ctrl->AddUserScript(js);
m_webView->ExecuteScript(js.wc_str(), NULL);
}
}
ICoreWebView2Settings* wxWebViewEdgeImpl::GetSettings()
{
if (!m_webView)
@@ -826,9 +844,7 @@ bool wxWebViewEdge::AddScriptMessageHandler(const wxString& name)
return false;
m_impl->m_scriptMsgHandlerName = name;
wxCOMPtr<ICoreWebView2Settings> settings(m_impl->GetSettings());
if (settings)
settings->put_IsWebMessageEnabled(true);
m_impl->UpdateWebMessageHandler();
return true;
}
@@ -836,9 +852,7 @@ bool wxWebViewEdge::AddScriptMessageHandler(const wxString& name)
bool wxWebViewEdge::RemoveScriptMessageHandler(const wxString& WXUNUSED(name))
{
m_impl->m_scriptMsgHandlerName.clear();
wxCOMPtr<ICoreWebView2Settings> settings(m_impl->GetSettings());
if (settings)
settings->put_IsWebMessageEnabled(false);
m_impl->UpdateWebMessageHandler();
return true;
}