mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-09-22 15:21:58 +00:00
add use_eval()
to desktop and web
This commit is contained in:
parent
08fa2382b0
commit
5cbf2698fd
5 changed files with 48 additions and 2 deletions
|
@ -193,6 +193,21 @@ pub(super) fn handler(
|
|||
|
||||
DevTool => webview.devtool(),
|
||||
|
||||
Eval(code) => webview.evaluate_script(code.as_str()).expect("failed to eval script"),
|
||||
Eval(code) => webview
|
||||
.evaluate_script(code.as_str())
|
||||
.expect("failed to eval script"),
|
||||
}
|
||||
}
|
||||
|
||||
/// Get a closure that executes any JavaScript in the WebView context.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// The closure will cause the message processing thread to panic if the
|
||||
/// provided script is not valid JavaScript code or if it returns an uncaught
|
||||
/// error.
|
||||
pub fn use_eval<S: std::fmt::Display>(cx: &ScopeState) -> impl Fn(S) + '_ {
|
||||
let desktop = use_window(&cx);
|
||||
|
||||
move |script| desktop.eval(script)
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ mod events;
|
|||
mod protocol;
|
||||
|
||||
use desktop_context::UserWindowEvent;
|
||||
pub use desktop_context::{use_window, DesktopContext};
|
||||
pub use desktop_context::{use_window, use_eval, DesktopContext};
|
||||
pub use wry;
|
||||
pub use wry::application as tao;
|
||||
|
||||
|
|
|
@ -62,12 +62,14 @@ use dioxus::VirtualDom;
|
|||
pub use dioxus_core as dioxus;
|
||||
use dioxus_core::prelude::Component;
|
||||
use futures_util::FutureExt;
|
||||
pub use crate::util::use_eval;
|
||||
|
||||
mod cache;
|
||||
mod cfg;
|
||||
mod dom;
|
||||
mod rehydrate;
|
||||
mod ric_raf;
|
||||
mod util;
|
||||
|
||||
/// Launch the VirtualDOM given a root component and a configuration.
|
||||
///
|
||||
|
|
|
@ -1 +1,24 @@
|
|||
//! Utilities specific to websys
|
||||
|
||||
use dioxus_core::*;
|
||||
|
||||
/// Get a closure that executes any JavaScript in the webpage.
|
||||
///
|
||||
/// # Safety
|
||||
///
|
||||
/// Please be very careful with this function. A script with too many dynamic
|
||||
/// parts is practically asking for a hacker to find an XSS vulnerability in
|
||||
/// it. **This applies especially to web targets, where the JavaScript context
|
||||
/// has access to most, if not all of your application data.**
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// The closure will panic if the provided script is not valid JavaScript code
|
||||
/// or if it returns an uncaught error.
|
||||
pub fn use_eval<S: std::fmt::Display>(_cx: &ScopeState) -> impl Fn(S) {
|
||||
|script| {
|
||||
js_sys::Function::new_no_args(&script.to_string())
|
||||
.call0(&wasm_bindgen::JsValue::NULL)
|
||||
.expect("failed to eval script");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,3 +44,9 @@ pub mod prelude {
|
|||
#[cfg(feature = "fermi")]
|
||||
pub use fermi::{use_atom_ref, use_init_atom_root, use_read, use_set, Atom, AtomRef};
|
||||
}
|
||||
|
||||
#[cfg(all(target = "wasm", feature = "web"))]
|
||||
pub use dioxus_web::use_eval;
|
||||
|
||||
#[cfg(all(not(target = "wasm"), feature = "desktop"))]
|
||||
pub use dioxus_desktop::use_eval;
|
Loading…
Reference in a new issue