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.
///
/// ## Reference

View File

@@ -8,8 +8,12 @@ impl Plugin for NavigationPlugin {
fn build(&self, app: &mut App) {
app.register_type::<RequestGoBack>()
.register_type::<RequestGoForward>()
.register_type::<RequestNavigate>()
.register_type::<RequestReload>()
.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<RequestGoBack>, browsers: NonSend<Browsers>) {
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>) {
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);
}