diff --git a/.changes/reload.md b/.changes/reload.md new file mode 100644 index 000000000000..e094f4eb36b3 --- /dev/null +++ b/.changes/reload.md @@ -0,0 +1,6 @@ +--- +'tauri': 'minor:feat' +'tauri-runtime-wry': 'minor:feat' +--- + +feat: add `Webview.reload` and `WebviewWindow.reload` diff --git a/crates/tauri-runtime-wry/src/lib.rs b/crates/tauri-runtime-wry/src/lib.rs index 1047c20ef205..33270f12cf64 100644 --- a/crates/tauri-runtime-wry/src/lib.rs +++ b/crates/tauri-runtime-wry/src/lib.rs @@ -1303,6 +1303,7 @@ pub enum WebviewMessage { WebviewEvent(WebviewEvent), SynthesizedWindowEvent(SynthesizedWindowEvent), Navigate(Url), + Reload, Print, Close, Show, @@ -1466,6 +1467,17 @@ impl WebviewDispatch for WryWebviewDispatcher { ) } + fn reload(&self) -> Result<()> { + send_user_message( + &self.context, + Message::Webview( + *self.window_id.lock().unwrap(), + self.webview_id, + WebviewMessage::Reload, + ), + ) + } + fn print(&self) -> Result<()> { send_user_message( &self.context, @@ -3307,6 +3319,11 @@ fn handle_user_message( log::error!("failed to navigate to url {}: {}", url, e); } } + WebviewMessage::Reload => { + if let Err(e) = webview.reload() { + log::error!("failed to reload: {e}"); + } + } WebviewMessage::Show => { if let Err(e) = webview.set_visible(true) { log::error!("failed to change webview visibility: {e}"); diff --git a/crates/tauri-runtime/src/lib.rs b/crates/tauri-runtime/src/lib.rs index 8c93a19a0907..632ba6caf96b 100644 --- a/crates/tauri-runtime/src/lib.rs +++ b/crates/tauri-runtime/src/lib.rs @@ -486,6 +486,9 @@ pub trait WebviewDispatch: Debug + Clone + Send + Sync + Sized + ' /// Navigate to the given URL. fn navigate(&self, url: Url) -> Result<()>; + /// Reloads the current page. + fn reload(&self) -> Result<()>; + /// Opens the dialog to prints the contents of the webview. fn print(&self) -> Result<()>; diff --git a/crates/tauri/src/test/mock_runtime.rs b/crates/tauri/src/test/mock_runtime.rs index 2d45794762ca..425d6d7065e2 100644 --- a/crates/tauri/src/test/mock_runtime.rs +++ b/crates/tauri/src/test/mock_runtime.rs @@ -558,6 +558,10 @@ impl WebviewDispatch for MockWebviewDispatcher { Ok(()) } + fn reload(&self) -> Result<()> { + Ok(()) + } + fn print(&self) -> Result<()> { Ok(()) } diff --git a/crates/tauri/src/webview/mod.rs b/crates/tauri/src/webview/mod.rs index 03002dd96d02..8882bf67a46a 100644 --- a/crates/tauri/src/webview/mod.rs +++ b/crates/tauri/src/webview/mod.rs @@ -1303,6 +1303,11 @@ fn main() { self.webview.dispatcher.navigate(url).map_err(Into::into) } + /// Reloads the current page. + pub fn reload(&self) -> crate::Result<()> { + self.webview.dispatcher.reload().map_err(Into::into) + } + fn is_local_url(&self, current_url: &Url) -> bool { let uses_https = current_url.scheme() == "https"; diff --git a/crates/tauri/src/webview/webview_window.rs b/crates/tauri/src/webview/webview_window.rs index 0fe6283fd9d9..5c31f0aa4fc3 100644 --- a/crates/tauri/src/webview/webview_window.rs +++ b/crates/tauri/src/webview/webview_window.rs @@ -1898,6 +1898,11 @@ impl WebviewWindow { self.webview.navigate(url) } + /// Reloads the current page. + pub fn reload(&self) -> crate::Result<()> { + self.webview.reload() + } + /// Handles this window receiving an [`crate::webview::InvokeRequest`]. pub fn on_message( self,