From 9c4f55b1f4c87362decada09dffece832eea40aa Mon Sep 17 00:00:00 2001 From: aspect Date: Sun, 17 Sep 2023 14:25:50 +0300 Subject: [PATCH] Remove Function() invocation from eframe text_agent to bypass "unsafe-eval" restrictions in Chrome browser extensions. (#3349) * remove Function (eval) from eframe text agent for compatibility with browser extensions. * cargo fmt on image viewer --- crates/eframe/src/web/text_agent.rs | 11 +++++------ crates/egui_demo_app/src/apps/image_viewer.rs | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/crates/eframe/src/web/text_agent.rs b/crates/eframe/src/web/text_agent.rs index 1688163b..d4f3b5ca 100644 --- a/crates/eframe/src/web/text_agent.rs +++ b/crates/eframe/src/web/text_agent.rs @@ -101,14 +101,13 @@ pub fn install_text_agent(runner_ref: &WebRunner) -> Result<(), JsValue> { // When input lost focus, focus on it again. // It is useful when user click somewhere outside canvas. + let input_refocus = input.clone(); runner_ref.add_event_listener(&input, "focusout", move |_event: web_sys::MouseEvent, _| { // Delay 10 ms, and focus again. - let func = js_sys::Function::new_no_args(&format!( - "document.getElementById('{AGENT_ID}').focus()" - )); - window - .set_timeout_with_callback_and_timeout_and_arguments_0(&func, 10) - .unwrap(); + let input_refocus = input_refocus.clone(); + call_after_delay(std::time::Duration::from_millis(10), move || { + input_refocus.focus().ok(); + }); })?; body.append_child(&input)?; diff --git a/crates/egui_demo_app/src/apps/image_viewer.rs b/crates/egui_demo_app/src/apps/image_viewer.rs index 7015e83b..6bc6cc05 100644 --- a/crates/egui_demo_app/src/apps/image_viewer.rs +++ b/crates/egui_demo_app/src/apps/image_viewer.rs @@ -167,7 +167,7 @@ impl eframe::App for ImageViewer { if !matches!(self.fit, ImageFit::Original { .. }) { self.fit = ImageFit::Original { scale: 1.0 }; } - let ImageFit::Original{scale} = &mut self.fit else { + let ImageFit::Original { scale } = &mut self.fit else { unreachable!() }; ui.add(Slider::new(scale, 0.1..=4.0).text("scale"));