Add common web message identifier
This commit is contained in:
@@ -75,6 +75,8 @@ public:
|
||||
|
||||
ICoreWebView2Settings* GetSettings();
|
||||
|
||||
void UpdateWebMessageHandler();
|
||||
|
||||
static wxDynamicLibrary ms_loaderDll;
|
||||
static wxString ms_browserExecutableDir;
|
||||
static wxString ms_version;
|
||||
|
@@ -158,6 +158,7 @@ public:
|
||||
void OnRunScriptDateWithEmulationLevel(wxCommandEvent& evt);
|
||||
void OnRunScriptArrayWithEmulationLevel(wxCommandEvent& evt);
|
||||
#endif
|
||||
void OnRunScriptMessage(wxCommandEvent& evt);
|
||||
void OnRunScriptCustom(wxCommandEvent& evt);
|
||||
void OnAddUserScript(wxCommandEvent& evt);
|
||||
void OnClearSelection(wxCommandEvent& evt);
|
||||
@@ -229,6 +230,7 @@ private:
|
||||
wxMenuItem* m_script_date_el;
|
||||
wxMenuItem* m_script_array_el;
|
||||
#endif
|
||||
wxMenuItem* m_script_message;
|
||||
wxMenuItem* m_script_custom;
|
||||
wxMenuItem* m_selection_clear;
|
||||
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");
|
||||
}
|
||||
#endif
|
||||
m_script_message = script_menu->Append(wxID_ANY, "Send script message");
|
||||
m_script_custom = script_menu->Append(wxID_ANY, "Custom script");
|
||||
m_tools_menu->AppendSubMenu(script_menu, _("Run 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());
|
||||
}
|
||||
#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::OnAddUserScript, this, addUserScript->GetId());
|
||||
Bind(wxEVT_MENU, &WebFrame::OnClearSelection, this, m_selection_clear->GetId());
|
||||
@@ -1187,6 +1191,11 @@ void WebFrame::OnRunScriptArrayWithEmulationLevel(wxCommandEvent& WXUNUSED(evt))
|
||||
}
|
||||
#endif
|
||||
|
||||
void WebFrame::OnRunScriptMessage(wxCommandEvent & evt)
|
||||
{
|
||||
RunScript("window.wx.postMessage('This is a web message');");
|
||||
}
|
||||
|
||||
void WebFrame::OnRunScriptCustom(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
wxTextEntryDialog dialog
|
||||
|
@@ -1307,7 +1307,17 @@ bool wxWebViewWebKit::AddScriptMessageHandler(const wxString& name)
|
||||
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_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)
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user