backport iframe fix to v0.7 (#5535)
* feat:Add opt‑in navigation handler for external URLs (#5531) * add navigation handler config option code from https://github.com/DioxusLabs/dioxus/pull/5231 * Re-order branches The branches should be reorder so that the branch that checks for the index and assets is always taken first. Otherwise, they will fail to load for users who forget to allow them in their custom handlers, which will be a crappy experience and hard to debug. * remove return * Change behavior when handler not set --------- Co-authored-by: not a cow <agielow@proton.me> * fix: allow navigations but disallow external nav --------- Co-authored-by: Martin Martinez Rivera <mrtnz.rvr@gmail.com> Co-authored-by: not a cow <agielow@proton.me>
This commit is contained in:
2 files changed
+30
-12
No files matched your search
@@ -20,6 +20,10 @@ type CustomEventHandler = Box<
|
||||
),
|
||||
>;
|
||||
|
||||
/// A function taking a URL and returning whether the webview should navigate to it or open it in
|
||||
/// the browser. If missing in the config, all URLs will be allowed.
|
||||
type NavigationHandler = Box<dyn Fn(&str) -> bool + 'static>;
|
||||
|
||||
/// The closing behaviour of specific application window.
|
||||
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
|
||||
#[non_exhaustive]
|
||||
@@ -70,6 +74,7 @@ pub struct Config {
|
||||
pub(crate) disable_dma_buf_on_wayland: bool,
|
||||
pub(crate) additional_windows_args: Option<String>,
|
||||
pub(crate) tray_icon_show_window_on_click: bool,
|
||||
pub(crate) navigation_handler: Option<NavigationHandler>,
|
||||
|
||||
#[allow(clippy::type_complexity)]
|
||||
pub(crate) on_window: Option<Box<dyn FnMut(Arc<Window>, &mut VirtualDom) + 'static>>,
|
||||
@@ -124,6 +129,7 @@ impl Config {
|
||||
on_window: None,
|
||||
additional_windows_args: None,
|
||||
tray_icon_show_window_on_click: true,
|
||||
navigation_handler: None,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,6 +356,13 @@ impl Config {
|
||||
self.tray_icon_show_window_on_click = show;
|
||||
self
|
||||
}
|
||||
|
||||
/// Set a custom navigation handler for non-dioxus URLs.
|
||||
/// Return true to allow navigation inside the webview, false to block.
|
||||
pub fn with_navigation_handler(mut self, f: impl Fn(&str) -> bool + 'static) -> Self {
|
||||
self.navigation_handler = Some(Box::new(f));
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for Config {
|
||||
|
||||
Reference in new issue
Block a user