feat: per-entity navigate and reload requests (#21)

* feat: add per-entity navigate and reload methods

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* clippy

---------

Co-authored-by: not-elm <elmgameinfo@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
elm
2026-02-11 18:23:40 +09:00
committed by GitHub
parent a26b8e9648
commit a6fec33006
2 changed files with 47 additions and 1 deletions

View File

@@ -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. /// Returns the current zoom level for the specified webview.
/// ///
/// ## Reference /// ## Reference

View File

@@ -8,8 +8,12 @@ impl Plugin for NavigationPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.register_type::<RequestGoBack>() app.register_type::<RequestGoBack>()
.register_type::<RequestGoForward>() .register_type::<RequestGoForward>()
.register_type::<RequestNavigate>()
.register_type::<RequestReload>()
.add_observer(apply_request_go_back) .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, 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<RequestGoBack>, browsers: NonSend<Browsers>) { fn apply_request_go_back(trigger: On<RequestGoBack>, browsers: NonSend<Browsers>) {
browsers.go_back(&trigger.webview); browsers.go_back(&trigger.webview);
} }
@@ -34,3 +53,11 @@ fn apply_request_go_back(trigger: On<RequestGoBack>, browsers: NonSend<Browsers>
fn apply_request_go_forward(trigger: On<RequestGoForward>, browsers: NonSend<Browsers>) { fn apply_request_go_forward(trigger: On<RequestGoForward>, browsers: NonSend<Browsers>) {
browsers.go_forward(&trigger.webview); browsers.go_forward(&trigger.webview);
} }
fn apply_request_navigate(trigger: On<RequestNavigate>, browsers: NonSend<Browsers>) {
browsers.navigate(&trigger.webview, &trigger.url);
}
fn apply_request_reload(trigger: On<RequestReload>, browsers: NonSend<Browsers>) {
browsers.reload_webview(&trigger.webview);
}