@@ -478,24 +478,37 @@ pub fn stop_loading(id: u64) -> Result<(), WebViewError> {
478478 run_on_main_thread ( move || stop_loading_inner ( id) )
479479}
480480
481- fn evaluate_javascript_inner ( id : u64 , script : String ) -> Result < ( ) , WebViewError > {
482- eprintln ! (
483- "[wrywebview] evaluate_javascript id={} bytes={}" ,
484- id,
485- script. len( )
486- ) ;
487- with_webview ( id, |webview| webview. evaluate_script ( & script) . map_err ( WebViewError :: from) )
481+ #[ uniffi:: export( callback_interface) ]
482+ pub trait JavaScriptCallback : Send + Sync {
483+ fn on_result ( & self , result : String ) ;
484+ }
485+
486+ fn evaluate_javascript_inner (
487+ id : u64 ,
488+ script : String ,
489+ callback : Box < dyn JavaScriptCallback > ,
490+ ) -> Result < ( ) , WebViewError > {
491+ with_webview ( id, |webview| {
492+ let _ = webview. evaluate_script_with_callback ( & script, move |result| {
493+ callback. on_result ( result) ;
494+ } ) ;
495+ Ok ( ( ) )
496+ } )
488497}
489498
490499#[ uniffi:: export]
491- pub fn evaluate_javascript ( id : u64 , script : String ) -> Result < ( ) , WebViewError > {
500+ pub fn evaluate_javascript (
501+ id : u64 ,
502+ script : String ,
503+ callback : Box < dyn JavaScriptCallback > ,
504+ ) -> Result < ( ) , WebViewError > {
492505 #[ cfg( target_os = "linux" ) ]
493506 {
494- return run_on_gtk_thread ( move || evaluate_javascript_inner ( id, script) ) ;
507+ return run_on_gtk_thread ( move || evaluate_javascript_inner ( id, script, callback ) ) ;
495508 }
496509
497510 #[ cfg( not( target_os = "linux" ) ) ]
498- run_on_main_thread ( move || evaluate_javascript_inner ( id, script) )
511+ run_on_main_thread ( move || evaluate_javascript_inner ( id, script, callback ) )
499512}
500513
501514fn go_back_inner ( id : u64 ) -> Result < ( ) , WebViewError > {
0 commit comments