diff --git a/crates/bevy_cef_core/src/browser_process/browsers.rs b/crates/bevy_cef_core/src/browser_process/browsers.rs index cee80d0..08a45a1 100644 --- a/crates/bevy_cef_core/src/browser_process/browsers.rs +++ b/crates/bevy_cef_core/src/browser_process/browsers.rs @@ -269,6 +269,25 @@ impl Browsers { } } + /// Navigate a specific webview to a new URL. + pub fn navigate(&self, webview: &Entity, url: &str) { + if let Some(browser) = self.browsers.get(webview) + && let Some(frame) = browser.client.main_frame() + { + frame.load_url(Some(&url.into())); + } + } + + /// Reload a specific webview's current page. + pub fn reload_webview(&self, webview: &Entity) { + if let Some(browser) = self.browsers.get(webview) + && let Some(frame) = browser.client.main_frame() + { + let url = frame.url().into_string(); + frame.load_url(Some(&url.as_str().into())); + } + } + /// Returns the current zoom level for the specified webview. /// /// ## Reference diff --git a/src/navigation.rs b/src/navigation.rs index 67fd3ca..ed2ddfb 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -8,8 +8,12 @@ impl Plugin for NavigationPlugin { fn build(&self, app: &mut App) { app.register_type::() .register_type::() + .register_type::() + .register_type::() .add_observer(apply_request_go_back) - .add_observer(apply_request_go_forward); + .add_observer(apply_request_go_forward) + .add_observer(apply_request_navigate) + .add_observer(apply_request_reload); } } @@ -27,6 +31,21 @@ pub struct RequestGoForward { pub webview: Entity, } +/// A trigger event to navigate to a new URL. +#[derive(Debug, EntityEvent, Clone, Reflect, Serialize, Deserialize)] +pub struct RequestNavigate { + #[event_target] + pub webview: Entity, + pub url: String, +} + +/// A trigger event to reload the current page. +#[derive(Debug, EntityEvent, Copy, Clone, Reflect, Serialize, Deserialize)] +pub struct RequestReload { + #[event_target] + pub webview: Entity, +} + fn apply_request_go_back(trigger: On, browsers: NonSend) { browsers.go_back(&trigger.webview); } @@ -34,3 +53,11 @@ fn apply_request_go_back(trigger: On, browsers: NonSend fn apply_request_go_forward(trigger: On, browsers: NonSend) { browsers.go_forward(&trigger.webview); } + +fn apply_request_navigate(trigger: On, browsers: NonSend) { + browsers.navigate(&trigger.webview, &trigger.url); +} + +fn apply_request_reload(trigger: On, browsers: NonSend) { + browsers.reload_webview(&trigger.webview); +}