mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-12-01 11:13:40 +03:00
feat: add navigate method (#7235)
This commit is contained in:
parent
b04444928c
commit
2a000e150d
5
.changes/core-navigate-method.md
Normal file
5
.changes/core-navigate-method.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"tauri": 'minor:feat'
|
||||||
|
---
|
||||||
|
|
||||||
|
Added `Window::navigate`.
|
5
.changes/runtime-navigate-method.md
Normal file
5
.changes/runtime-navigate-method.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"tauri-runtime": 'minor:feat'
|
||||||
|
---
|
||||||
|
|
||||||
|
Added `navigate` function to `Dispatch` trait.
|
5
.changes/wry-navigate-method.md
Normal file
5
.changes/wry-navigate-method.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"tauri-runtime-wry": 'minor:feat'
|
||||||
|
---
|
||||||
|
|
||||||
|
Implement navigate method
|
@ -1108,6 +1108,7 @@ pub enum WindowMessage {
|
|||||||
SetMinimizable(bool),
|
SetMinimizable(bool),
|
||||||
SetClosable(bool),
|
SetClosable(bool),
|
||||||
SetTitle(String),
|
SetTitle(String),
|
||||||
|
Navigate(Url),
|
||||||
Maximize,
|
Maximize,
|
||||||
Unmaximize,
|
Unmaximize,
|
||||||
Minimize,
|
Minimize,
|
||||||
@ -1456,6 +1457,13 @@ impl<T: UserEvent> Dispatch<T> for WryDispatcher<T> {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn navigate(&self, url: Url) -> Result<()> {
|
||||||
|
send_user_message(
|
||||||
|
&self.context,
|
||||||
|
Message::Window(self.window_id, WindowMessage::Navigate(url)),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
fn maximize(&self) -> Result<()> {
|
fn maximize(&self) -> Result<()> {
|
||||||
send_user_message(
|
send_user_message(
|
||||||
&self.context,
|
&self.context,
|
||||||
@ -2429,6 +2437,11 @@ fn handle_user_message<T: UserEvent>(
|
|||||||
WindowMessage::SetMinimizable(minimizable) => window.set_minimizable(minimizable),
|
WindowMessage::SetMinimizable(minimizable) => window.set_minimizable(minimizable),
|
||||||
WindowMessage::SetClosable(closable) => window.set_closable(closable),
|
WindowMessage::SetClosable(closable) => window.set_closable(closable),
|
||||||
WindowMessage::SetTitle(title) => window.set_title(&title),
|
WindowMessage::SetTitle(title) => window.set_title(&title),
|
||||||
|
WindowMessage::Navigate(url) => {
|
||||||
|
if let WindowHandle::Webview { inner: w, .. } = &window {
|
||||||
|
w.load_url(url.as_str())
|
||||||
|
}
|
||||||
|
}
|
||||||
WindowMessage::Maximize => window.set_maximized(true),
|
WindowMessage::Maximize => window.set_maximized(true),
|
||||||
WindowMessage::Unmaximize => window.set_maximized(false),
|
WindowMessage::Unmaximize => window.set_maximized(false),
|
||||||
WindowMessage::Minimize => window.set_minimized(true),
|
WindowMessage::Minimize => window.set_minimized(true),
|
||||||
|
@ -676,6 +676,9 @@ pub trait Dispatch<T: UserEvent>: Debug + Clone + Send + Sync + Sized + 'static
|
|||||||
/// Updates the window title.
|
/// Updates the window title.
|
||||||
fn set_title<S: Into<String>>(&self, title: S) -> Result<()>;
|
fn set_title<S: Into<String>>(&self, title: S) -> Result<()>;
|
||||||
|
|
||||||
|
/// Naviagte to the given URL.
|
||||||
|
fn navigate(&self, url: Url) -> Result<()>;
|
||||||
|
|
||||||
/// Maximizes the window.
|
/// Maximizes the window.
|
||||||
fn maximize(&self) -> Result<()>;
|
fn maximize(&self) -> Result<()>;
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ use tauri_runtime::{
|
|||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
use tauri_utils::TitleBarStyle;
|
use tauri_utils::TitleBarStyle;
|
||||||
use tauri_utils::{config::WindowConfig, Theme};
|
use tauri_utils::{config::WindowConfig, Theme};
|
||||||
|
use url::Url;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
@ -116,7 +117,7 @@ impl<T: UserEvent> RuntimeHandle<T> for MockRuntimeHandle {
|
|||||||
id,
|
id,
|
||||||
context: self.context.clone(),
|
context: self.context.clone(),
|
||||||
last_evaluated_script: Default::default(),
|
last_evaluated_script: Default::default(),
|
||||||
url: pending.url,
|
url: Arc::new(Mutex::new(pending.url)),
|
||||||
},
|
},
|
||||||
menu_ids: Default::default(),
|
menu_ids: Default::default(),
|
||||||
})
|
})
|
||||||
@ -190,7 +191,7 @@ impl<T: UserEvent> RuntimeHandle<T> for MockRuntimeHandle {
|
|||||||
pub struct MockDispatcher {
|
pub struct MockDispatcher {
|
||||||
id: WindowId,
|
id: WindowId,
|
||||||
context: RuntimeContext,
|
context: RuntimeContext,
|
||||||
url: String,
|
url: Arc<Mutex<String>>,
|
||||||
last_evaluated_script: Arc<Mutex<Option<String>>>,
|
last_evaluated_script: Arc<Mutex<Option<String>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,7 +384,12 @@ impl<T: UserEvent> Dispatch<T> for MockDispatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn url(&self) -> Result<url::Url> {
|
fn url(&self) -> Result<url::Url> {
|
||||||
self.url.parse().map_err(|_| Error::FailedToReceiveMessage)
|
self
|
||||||
|
.url
|
||||||
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.parse()
|
||||||
|
.map_err(|_| Error::FailedToReceiveMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn scale_factor(&self) -> Result<f64> {
|
fn scale_factor(&self) -> Result<f64> {
|
||||||
@ -528,7 +534,7 @@ impl<T: UserEvent> Dispatch<T> for MockDispatcher {
|
|||||||
id,
|
id,
|
||||||
context: self.context.clone(),
|
context: self.context.clone(),
|
||||||
last_evaluated_script: Default::default(),
|
last_evaluated_script: Default::default(),
|
||||||
url: pending.url,
|
url: Arc::new(Mutex::new(pending.url)),
|
||||||
},
|
},
|
||||||
menu_ids: Default::default(),
|
menu_ids: Default::default(),
|
||||||
})
|
})
|
||||||
@ -554,6 +560,11 @@ impl<T: UserEvent> Dispatch<T> for MockDispatcher {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn navigate(&self, url: Url) -> Result<()> {
|
||||||
|
*self.url.lock().unwrap() = url.to_string();
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn maximize(&self) -> Result<()> {
|
fn maximize(&self) -> Result<()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -788,7 +799,7 @@ impl<T: UserEvent> Runtime<T> for MockRuntime {
|
|||||||
id,
|
id,
|
||||||
context: self.context.clone(),
|
context: self.context.clone(),
|
||||||
last_evaluated_script: Default::default(),
|
last_evaluated_script: Default::default(),
|
||||||
url: pending.url,
|
url: Arc::new(Mutex::new(pending.url)),
|
||||||
},
|
},
|
||||||
menu_ids: Default::default(),
|
menu_ids: Default::default(),
|
||||||
})
|
})
|
||||||
|
@ -777,9 +777,6 @@ pub struct Window<R: Runtime> {
|
|||||||
manager: WindowManager<R>,
|
manager: WindowManager<R>,
|
||||||
pub(crate) app_handle: AppHandle<R>,
|
pub(crate) app_handle: AppHandle<R>,
|
||||||
js_event_listeners: Arc<Mutex<HashMap<JsEventListenerKey, HashSet<usize>>>>,
|
js_event_listeners: Arc<Mutex<HashMap<JsEventListenerKey, HashSet<usize>>>>,
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
pub(crate) current_url: url::Url,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe impl<R: Runtime> raw_window_handle::HasRawWindowHandle for Window<R> {
|
unsafe impl<R: Runtime> raw_window_handle::HasRawWindowHandle for Window<R> {
|
||||||
@ -795,8 +792,6 @@ impl<R: Runtime> Clone for Window<R> {
|
|||||||
manager: self.manager.clone(),
|
manager: self.manager.clone(),
|
||||||
app_handle: self.app_handle.clone(),
|
app_handle: self.app_handle.clone(),
|
||||||
js_event_listeners: self.js_event_listeners.clone(),
|
js_event_listeners: self.js_event_listeners.clone(),
|
||||||
#[cfg(test)]
|
|
||||||
current_url: self.current_url.clone(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -949,8 +944,6 @@ impl<R: Runtime> Window<R> {
|
|||||||
manager,
|
manager,
|
||||||
app_handle,
|
app_handle,
|
||||||
js_event_listeners: Default::default(),
|
js_event_listeners: Default::default(),
|
||||||
#[cfg(test)]
|
|
||||||
current_url: "http://tauri.app".parse().unwrap(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1638,19 +1631,13 @@ impl<R: Runtime> Window<R> {
|
|||||||
impl<R: Runtime> Window<R> {
|
impl<R: Runtime> Window<R> {
|
||||||
/// Returns the current url of the webview.
|
/// Returns the current url of the webview.
|
||||||
// TODO: in v2, change this type to Result
|
// TODO: in v2, change this type to Result
|
||||||
#[cfg(not(test))]
|
|
||||||
pub fn url(&self) -> Url {
|
pub fn url(&self) -> Url {
|
||||||
self.window.dispatcher.url().unwrap()
|
self.window.dispatcher.url().unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
/// Navigates the webview to the defined url.
|
||||||
pub fn url(&self) -> Url {
|
pub fn navigate(&mut self, url: Url) {
|
||||||
self.current_url.clone()
|
self.window.dispatcher.navigate(url).unwrap();
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
pub(crate) fn navigate(&mut self, url: Url) {
|
|
||||||
self.current_url = url;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_local_url(&self, current_url: &Url) -> bool {
|
fn is_local_url(&self, current_url: &Url) -> bool {
|
||||||
|
Loading…
Reference in New Issue
Block a user