Add common web message identifier
This commit is contained in:
@@ -75,6 +75,8 @@ public:
|
|||||||
|
|
||||||
ICoreWebView2Settings* GetSettings();
|
ICoreWebView2Settings* GetSettings();
|
||||||
|
|
||||||
|
void UpdateWebMessageHandler();
|
||||||
|
|
||||||
static wxDynamicLibrary ms_loaderDll;
|
static wxDynamicLibrary ms_loaderDll;
|
||||||
static wxString ms_browserExecutableDir;
|
static wxString ms_browserExecutableDir;
|
||||||
static wxString ms_version;
|
static wxString ms_version;
|
||||||
|
@@ -158,6 +158,7 @@ public:
|
|||||||
void OnRunScriptDateWithEmulationLevel(wxCommandEvent& evt);
|
void OnRunScriptDateWithEmulationLevel(wxCommandEvent& evt);
|
||||||
void OnRunScriptArrayWithEmulationLevel(wxCommandEvent& evt);
|
void OnRunScriptArrayWithEmulationLevel(wxCommandEvent& evt);
|
||||||
#endif
|
#endif
|
||||||
|
void OnRunScriptMessage(wxCommandEvent& evt);
|
||||||
void OnRunScriptCustom(wxCommandEvent& evt);
|
void OnRunScriptCustom(wxCommandEvent& evt);
|
||||||
void OnAddUserScript(wxCommandEvent& evt);
|
void OnAddUserScript(wxCommandEvent& evt);
|
||||||
void OnClearSelection(wxCommandEvent& evt);
|
void OnClearSelection(wxCommandEvent& evt);
|
||||||
@@ -229,6 +230,7 @@ private:
|
|||||||
wxMenuItem* m_script_date_el;
|
wxMenuItem* m_script_date_el;
|
||||||
wxMenuItem* m_script_array_el;
|
wxMenuItem* m_script_array_el;
|
||||||
#endif
|
#endif
|
||||||
|
wxMenuItem* m_script_message;
|
||||||
wxMenuItem* m_script_custom;
|
wxMenuItem* m_script_custom;
|
||||||
wxMenuItem* m_selection_clear;
|
wxMenuItem* m_selection_clear;
|
||||||
wxMenuItem* m_selection_delete;
|
wxMenuItem* m_selection_delete;
|
||||||
@@ -487,6 +489,7 @@ WebFrame::WebFrame(const wxString& url) :
|
|||||||
m_script_array_el = script_menu->Append(wxID_ANY, "Return array changing emulation level");
|
m_script_array_el = script_menu->Append(wxID_ANY, "Return array changing emulation level");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
m_script_message = script_menu->Append(wxID_ANY, "Send script message");
|
||||||
m_script_custom = script_menu->Append(wxID_ANY, "Custom script");
|
m_script_custom = script_menu->Append(wxID_ANY, "Custom script");
|
||||||
m_tools_menu->AppendSubMenu(script_menu, _("Run Script"));
|
m_tools_menu->AppendSubMenu(script_menu, _("Run Script"));
|
||||||
wxMenuItem* addUserScript = m_tools_menu->Append(wxID_ANY, _("Add user script"));
|
wxMenuItem* addUserScript = m_tools_menu->Append(wxID_ANY, _("Add user script"));
|
||||||
@@ -587,6 +590,7 @@ WebFrame::WebFrame(const wxString& url) :
|
|||||||
Bind(wxEVT_MENU, &WebFrame::OnRunScriptArrayWithEmulationLevel, this, m_script_array_el->GetId());
|
Bind(wxEVT_MENU, &WebFrame::OnRunScriptArrayWithEmulationLevel, this, m_script_array_el->GetId());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Bind(wxEVT_MENU, &WebFrame::OnRunScriptMessage, this, m_script_message->GetId());
|
||||||
Bind(wxEVT_MENU, &WebFrame::OnRunScriptCustom, this, m_script_custom->GetId());
|
Bind(wxEVT_MENU, &WebFrame::OnRunScriptCustom, this, m_script_custom->GetId());
|
||||||
Bind(wxEVT_MENU, &WebFrame::OnAddUserScript, this, addUserScript->GetId());
|
Bind(wxEVT_MENU, &WebFrame::OnAddUserScript, this, addUserScript->GetId());
|
||||||
Bind(wxEVT_MENU, &WebFrame::OnClearSelection, this, m_selection_clear->GetId());
|
Bind(wxEVT_MENU, &WebFrame::OnClearSelection, this, m_selection_clear->GetId());
|
||||||
@@ -1187,6 +1191,11 @@ void WebFrame::OnRunScriptArrayWithEmulationLevel(wxCommandEvent& WXUNUSED(evt))
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void WebFrame::OnRunScriptMessage(wxCommandEvent & evt)
|
||||||
|
{
|
||||||
|
RunScript("window.wx.postMessage('This is a web message');");
|
||||||
|
}
|
||||||
|
|
||||||
void WebFrame::OnRunScriptCustom(wxCommandEvent& WXUNUSED(evt))
|
void WebFrame::OnRunScriptCustom(wxCommandEvent& WXUNUSED(evt))
|
||||||
{
|
{
|
||||||
wxTextEntryDialog dialog
|
wxTextEntryDialog dialog
|
||||||
|
@@ -1307,7 +1307,17 @@ bool wxWebViewWebKit::AddScriptMessageHandler(const wxString& name)
|
|||||||
WebKitUserContentManager *ucm = webkit_web_view_get_user_content_manager(m_web_view);
|
WebKitUserContentManager *ucm = webkit_web_view_get_user_content_manager(m_web_view);
|
||||||
g_signal_connect(ucm, wxString::Format("script-message-received::%s", name).utf8_str(),
|
g_signal_connect(ucm, wxString::Format("script-message-received::%s", name).utf8_str(),
|
||||||
G_CALLBACK(wxgtk_webview_webkit_script_message_received), this);
|
G_CALLBACK(wxgtk_webview_webkit_script_message_received), this);
|
||||||
return webkit_user_content_manager_register_script_message_handler(ucm, name.utf8_str());
|
bool res = webkit_user_content_manager_register_script_message_handler(ucm, name.utf8_str());
|
||||||
|
if (res)
|
||||||
|
{
|
||||||
|
// Make webkit message handler available under common name
|
||||||
|
wxString js = wxString::Format("window.%s = window.webkit.messageHandlers.%s;",
|
||||||
|
name, name);
|
||||||
|
AddUserScript(js);
|
||||||
|
RunScript(js);
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxWebViewWebKit::RemoveScriptMessageHandler(const wxString& name)
|
bool wxWebViewWebKit::RemoveScriptMessageHandler(const wxString& name)
|
||||||
|
@@ -420,8 +420,8 @@ HRESULT wxWebViewEdgeImpl::OnWebViewCreated(HRESULT result, ICoreWebView2Control
|
|||||||
if (settings)
|
if (settings)
|
||||||
{
|
{
|
||||||
settings->put_IsStatusBarEnabled(false);
|
settings->put_IsStatusBarEnabled(false);
|
||||||
settings->put_IsWebMessageEnabled(!m_scriptMsgHandlerName.empty());
|
|
||||||
}
|
}
|
||||||
|
UpdateWebMessageHandler();
|
||||||
|
|
||||||
if (!m_pendingUserScripts.empty())
|
if (!m_pendingUserScripts.empty())
|
||||||
{
|
{
|
||||||
@@ -440,6 +440,24 @@ HRESULT wxWebViewEdgeImpl::OnWebViewCreated(HRESULT result, ICoreWebView2Control
|
|||||||
return S_OK;
|
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()
|
ICoreWebView2Settings* wxWebViewEdgeImpl::GetSettings()
|
||||||
{
|
{
|
||||||
if (!m_webView)
|
if (!m_webView)
|
||||||
@@ -826,9 +844,7 @@ bool wxWebViewEdge::AddScriptMessageHandler(const wxString& name)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_impl->m_scriptMsgHandlerName = name;
|
m_impl->m_scriptMsgHandlerName = name;
|
||||||
wxCOMPtr<ICoreWebView2Settings> settings(m_impl->GetSettings());
|
m_impl->UpdateWebMessageHandler();
|
||||||
if (settings)
|
|
||||||
settings->put_IsWebMessageEnabled(true);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -836,9 +852,7 @@ bool wxWebViewEdge::AddScriptMessageHandler(const wxString& name)
|
|||||||
bool wxWebViewEdge::RemoveScriptMessageHandler(const wxString& WXUNUSED(name))
|
bool wxWebViewEdge::RemoveScriptMessageHandler(const wxString& WXUNUSED(name))
|
||||||
{
|
{
|
||||||
m_impl->m_scriptMsgHandlerName.clear();
|
m_impl->m_scriptMsgHandlerName.clear();
|
||||||
wxCOMPtr<ICoreWebView2Settings> settings(m_impl->GetSettings());
|
m_impl->UpdateWebMessageHandler();
|
||||||
if (settings)
|
|
||||||
settings->put_IsWebMessageEnabled(false);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user