Add wxEVT_WEBVIEW_WINDOW_CLOSE_REQUESTED
This event is usually triggered by javascript calling window.close()
This commit is contained in:
parent
623591823d
commit
45d5de6a26
7 changed files with 40 additions and 0 deletions
|
|
@ -85,6 +85,7 @@ public:
|
|||
EventRegistrationToken m_containsFullScreenElementChangedToken = { };
|
||||
EventRegistrationToken m_webMessageReceivedToken = { };
|
||||
EventRegistrationToken m_webResourceRequestedToken = { };
|
||||
EventRegistrationToken m_windowCloseRequestedToken = { };
|
||||
|
||||
// WebView Event handlers
|
||||
HRESULT OnNavigationStarting(ICoreWebView2* sender, ICoreWebView2NavigationStartingEventArgs* args);
|
||||
|
|
@ -98,6 +99,7 @@ public:
|
|||
HRESULT OnWebMessageReceived(ICoreWebView2* sender, ICoreWebView2WebMessageReceivedEventArgs* args);
|
||||
HRESULT OnWebResourceRequested(ICoreWebView2* sender, ICoreWebView2WebResourceRequestedEventArgs* args);
|
||||
HRESULT OnAddScriptToExecuteOnDocumentedCreatedCompleted(HRESULT errorCode, LPCWSTR id);
|
||||
HRESULT OnWindowCloseRequested(ICoreWebView2* sender, IUnknown* args);
|
||||
|
||||
HRESULT OnEnvironmentCreated(HRESULT result, ICoreWebView2Environment* environment);
|
||||
HRESULT OnWebViewCreated(HRESULT result, ICoreWebView2Controller* webViewController);
|
||||
|
|
|
|||
|
|
@ -359,6 +359,7 @@ wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_WEBVIEW_NAVIGATED, wxWebVie
|
|||
wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_WEBVIEW_LOADED, wxWebViewEvent );
|
||||
wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_WEBVIEW_ERROR, wxWebViewEvent );
|
||||
wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_WEBVIEW_NEWWINDOW, wxWebViewEvent );
|
||||
wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_WEBVIEW_WINDOW_CLOSE_REQUESTED, wxWebViewEvent);
|
||||
wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_WEBVIEW_TITLE_CHANGED, wxWebViewEvent );
|
||||
wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_WEBVIEW_FULLSCREEN_CHANGED, wxWebViewEvent);
|
||||
wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_WEBVIEW, wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED, wxWebViewEvent);
|
||||
|
|
|
|||
|
|
@ -708,6 +708,10 @@ public:
|
|||
Process a @c wxEVT_WEBVIEW_NEWWINDOW event, generated when a new
|
||||
window is created. You must handle this event if you want anything to
|
||||
happen, for example to load the page in a new window or tab.
|
||||
@event{wxEVT_WEBVIEW_WINDOW_CLOSE_REQUESTED(id, func)}
|
||||
Process a @c wxEVT_WEBVIEW_WINDOW_CLOSE_REQUESTED event, generated when
|
||||
a window is requested to be closed.
|
||||
only available in wxWidgets 3.3.0 or later.
|
||||
@event{EVT_WEBVIEW_TITLE_CHANGED(id, func)}
|
||||
Process a @c wxEVT_WEBVIEW_TITLE_CHANGED event, generated when
|
||||
the page title changes. Use GetString to get the title.
|
||||
|
|
@ -1600,6 +1604,10 @@ public:
|
|||
Process a @c wxEVT_WEBVIEW_NEWWINDOW event, generated when a new
|
||||
window is created. You must handle this event if you want anything to
|
||||
happen, for example to load the page in a new window or tab.
|
||||
@event{wxEVT_WEBVIEW_WINDOW_CLOSE_REQUESTED(id, func)}
|
||||
Process a @c wxEVT_WEBVIEW_WINDOW_CLOSE_REQUESTED event, generated when
|
||||
a window is requested to be closed.
|
||||
only available in wxWidgets 3.3.0 or later.
|
||||
@event{EVT_WEBVIEW_TITLE_CHANGED(id, func)}
|
||||
Process a @c wxEVT_WEBVIEW_TITLE_CHANGED event, generated when
|
||||
the page title changes. Use GetString to get the title.
|
||||
|
|
|
|||
|
|
@ -118,6 +118,7 @@ public:
|
|||
void OnFullScreenChanged(wxWebViewEvent& evt);
|
||||
void OnScriptMessage(wxWebViewEvent& evt);
|
||||
void OnScriptResult(wxWebViewEvent& evt);
|
||||
void OnWindowCloseRequested(wxWebViewEvent& evt);
|
||||
void OnSetPage(wxCommandEvent& evt);
|
||||
void OnViewSourceRequest(wxCommandEvent& evt);
|
||||
void OnViewTextRequest(wxCommandEvent& evt);
|
||||
|
|
@ -581,6 +582,7 @@ WebFrame::WebFrame(const wxString& url) :
|
|||
Bind(wxEVT_WEBVIEW_FULLSCREEN_CHANGED, &WebFrame::OnFullScreenChanged, this, m_browser->GetId());
|
||||
Bind(wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED, &WebFrame::OnScriptMessage, this, m_browser->GetId());
|
||||
Bind(wxEVT_WEBVIEW_SCRIPT_RESULT, &WebFrame::OnScriptResult, this, m_browser->GetId());
|
||||
Bind(wxEVT_WEBVIEW_WINDOW_CLOSE_REQUESTED, &WebFrame::OnWindowCloseRequested, this, m_browser->GetId());
|
||||
|
||||
// Connect the menu events
|
||||
Bind(wxEVT_MENU, &WebFrame::OnSetPage, this, setPage->GetId());
|
||||
|
|
@ -981,6 +983,11 @@ void WebFrame::OnScriptResult(wxWebViewEvent& evt)
|
|||
wxLogMessage("Async script result received; value = %s", evt.GetString());
|
||||
}
|
||||
|
||||
void WebFrame::OnWindowCloseRequested(wxWebViewEvent& evt)
|
||||
{
|
||||
wxLogMessage("Window close requested");
|
||||
}
|
||||
|
||||
void WebFrame::OnSetPage(wxCommandEvent& WXUNUSED(evt))
|
||||
{
|
||||
m_browser->SetPage
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ wxDEFINE_EVENT( wxEVT_WEBVIEW_NAVIGATED, wxWebViewEvent );
|
|||
wxDEFINE_EVENT( wxEVT_WEBVIEW_LOADED, wxWebViewEvent );
|
||||
wxDEFINE_EVENT( wxEVT_WEBVIEW_ERROR, wxWebViewEvent );
|
||||
wxDEFINE_EVENT( wxEVT_WEBVIEW_NEWWINDOW, wxWebViewEvent );
|
||||
wxDEFINE_EVENT( wxEVT_WEBVIEW_WINDOW_CLOSE_REQUESTED, wxWebViewEvent );
|
||||
wxDEFINE_EVENT( wxEVT_WEBVIEW_TITLE_CHANGED, wxWebViewEvent );
|
||||
wxDEFINE_EVENT( wxEVT_WEBVIEW_FULLSCREEN_CHANGED, wxWebViewEvent);
|
||||
wxDEFINE_EVENT( wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED, wxWebViewEvent);
|
||||
|
|
|
|||
|
|
@ -280,6 +280,7 @@ wxWebViewEdgeImpl::~wxWebViewEdgeImpl()
|
|||
m_webView->remove_ContainsFullScreenElementChanged(m_containsFullScreenElementChangedToken);
|
||||
m_webView->remove_WebMessageReceived(m_webMessageReceivedToken);
|
||||
m_webView->remove_WebResourceRequested(m_webResourceRequestedToken);
|
||||
m_webView->remove_WindowCloseRequested(m_windowCloseRequestedToken);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -509,6 +510,13 @@ HRESULT wxWebViewEdgeImpl::OnNewWindowRequested(ICoreWebView2* WXUNUSED(sender),
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT wxWebViewEdgeImpl::OnWindowCloseRequested(ICoreWebView2* WXUNUSED(sender), IUnknown* WXUNUSED(args))
|
||||
{
|
||||
wxWebViewEvent evt(wxEVT_WEBVIEW_WINDOW_CLOSE_REQUESTED, m_ctrl->GetId(), m_ctrl->GetCurrentURL(), "");
|
||||
m_ctrl->GetEventHandler()->AddPendingEvent(evt);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT wxWebViewEdgeImpl::OnDocumentTitleChanged(ICoreWebView2* WXUNUSED(sender), IUnknown* WXUNUSED(args))
|
||||
{
|
||||
wxWebViewEvent event(wxEVT_WEBVIEW_TITLE_CHANGED,
|
||||
|
|
@ -675,6 +683,10 @@ HRESULT wxWebViewEdgeImpl::OnWebViewCreated(HRESULT result, ICoreWebView2Control
|
|||
Callback<ICoreWebView2WebResourceRequestedEventHandler>(
|
||||
this, &wxWebViewEdgeImpl::OnWebResourceRequested).Get(),
|
||||
&m_webResourceRequestedToken);
|
||||
m_webView->add_WindowCloseRequested(
|
||||
Callback<ICoreWebView2WindowCloseRequestedEventHandler>(
|
||||
this, &wxWebViewEdgeImpl::OnWindowCloseRequested).Get(),
|
||||
&m_windowCloseRequestedToken);
|
||||
|
||||
// Register handlers
|
||||
for (wxStringToWebHandlerMap::iterator it = m_handlers.begin(); it != m_handlers.end(); it++)
|
||||
|
|
|
|||
|
|
@ -1024,6 +1024,15 @@ WX_API_AVAILABLE_MACOS(10, 13)
|
|||
return nil;
|
||||
}
|
||||
|
||||
- (void)webViewDidClose:(WKWebView *)webView
|
||||
{
|
||||
wxWebViewEvent event(wxEVT_WEBVIEW_WINDOW_CLOSE_REQUESTED,
|
||||
webKitWindow->GetId(), "", "");
|
||||
|
||||
if (webKitWindow && webKitWindow->GetEventHandler())
|
||||
webKitWindow->GetEventHandler()->ProcessEvent(event);
|
||||
}
|
||||
|
||||
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message
|
||||
initiatedByFrame:(WKFrameInfo *)frame
|
||||
completionHandler:(void (^)())completionHandler
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue