Add named script handler to edge
This commit is contained in:
@@ -38,6 +38,7 @@ public:
|
|||||||
wxString m_pendingURL;
|
wxString m_pendingURL;
|
||||||
int m_pendingContextMenuEnabled;
|
int m_pendingContextMenuEnabled;
|
||||||
int m_pendingAccessToDevToolsEnabled;
|
int m_pendingAccessToDevToolsEnabled;
|
||||||
|
wxString m_scriptMsgHandlerName;
|
||||||
|
|
||||||
// WebView Events tokens
|
// WebView Events tokens
|
||||||
EventRegistrationToken m_navigationStartingToken = { };
|
EventRegistrationToken m_navigationStartingToken = { };
|
||||||
|
@@ -90,6 +90,8 @@ public:
|
|||||||
virtual bool IsAccessToDevToolsEnabled() const wxOVERRIDE;
|
virtual bool IsAccessToDevToolsEnabled() const wxOVERRIDE;
|
||||||
|
|
||||||
virtual bool RunScript(const wxString& javascript, wxString* output = NULL) const wxOVERRIDE;
|
virtual bool RunScript(const wxString& javascript, wxString* output = NULL) const wxOVERRIDE;
|
||||||
|
virtual bool AddScriptMessageHandler(const wxString& name) wxOVERRIDE;
|
||||||
|
virtual bool RemoveScriptMessageHandler(const wxString& name) wxOVERRIDE;
|
||||||
|
|
||||||
virtual void RegisterHandler(wxSharedPtr<wxWebViewHandler> handler) wxOVERRIDE;
|
virtual void RegisterHandler(wxSharedPtr<wxWebViewHandler> handler) wxOVERRIDE;
|
||||||
|
|
||||||
|
@@ -333,7 +333,8 @@ wxWebViewEdgeImpl::OnWebMessageReceived(ICoreWebView2* WXUNUSED(sender),
|
|||||||
}
|
}
|
||||||
|
|
||||||
wxWebViewEvent event(wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED, m_ctrl->GetId(),
|
wxWebViewEvent event(wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED, m_ctrl->GetId(),
|
||||||
m_ctrl->GetCurrentURL(), wxString());
|
m_ctrl->GetCurrentURL(), wxString(),
|
||||||
|
wxWEBVIEW_NAV_ACTION_NONE, m_scriptMsgHandlerName);
|
||||||
event.SetEventObject(m_ctrl);
|
event.SetEventObject(m_ctrl);
|
||||||
|
|
||||||
// Try to decode JSON string or return original
|
// Try to decode JSON string or return original
|
||||||
@@ -417,7 +418,10 @@ HRESULT wxWebViewEdgeImpl::OnWebViewCreated(HRESULT result, ICoreWebView2Control
|
|||||||
|
|
||||||
wxCOMPtr<ICoreWebView2Settings> settings(GetSettings());
|
wxCOMPtr<ICoreWebView2Settings> settings(GetSettings());
|
||||||
if (settings)
|
if (settings)
|
||||||
|
{
|
||||||
settings->put_IsStatusBarEnabled(false);
|
settings->put_IsStatusBarEnabled(false);
|
||||||
|
settings->put_IsWebMessageEnabled(!m_scriptMsgHandlerName.empty());
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_pendingURL.empty())
|
if (!m_pendingURL.empty())
|
||||||
{
|
{
|
||||||
@@ -807,6 +811,29 @@ bool wxWebViewEdge::RunScript(const wxString& javascript, wxString* output) cons
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxWebViewEdge::AddScriptMessageHandler(const wxString& name)
|
||||||
|
{
|
||||||
|
// Edge only supports a single message handler
|
||||||
|
if (!m_impl->m_scriptMsgHandlerName.empty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_impl->m_scriptMsgHandlerName = name;
|
||||||
|
wxCOMPtr<ICoreWebView2Settings> settings(m_impl->GetSettings());
|
||||||
|
if (settings)
|
||||||
|
settings->put_IsWebMessageEnabled(true);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxWebViewEdge::RemoveScriptMessageHandler(const wxString& WXUNUSED(name))
|
||||||
|
{
|
||||||
|
m_impl->m_scriptMsgHandlerName.clear();
|
||||||
|
wxCOMPtr<ICoreWebView2Settings> settings(m_impl->GetSettings());
|
||||||
|
if (settings)
|
||||||
|
settings->put_IsWebMessageEnabled(false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void wxWebViewEdge::RegisterHandler(wxSharedPtr<wxWebViewHandler> handler)
|
void wxWebViewEdge::RegisterHandler(wxSharedPtr<wxWebViewHandler> handler)
|
||||||
{
|
{
|
||||||
// TODO: could maybe be implemented via IWebView2WebView5::add_WebResourceRequested
|
// TODO: could maybe be implemented via IWebView2WebView5::add_WebResourceRequested
|
||||||
|
Reference in New Issue
Block a user