@@ -27,12 +27,8 @@ use tauri_utils::{
2727 html:: { SCRIPT_NONCE_TOKEN , STYLE_NONCE_TOKEN } ,
2828} ;
2929
30- use crate :: event:: EmitArgs ;
3130use crate :: {
32- app:: {
33- AppHandle , GlobalWindowEvent , GlobalWindowEventListener , OnPageLoad , PageLoadPayload ,
34- UriSchemeResponder ,
35- } ,
31+ app:: { AppHandle , GlobalWindowEvent , GlobalWindowEventListener , OnPageLoad , UriSchemeResponder } ,
3632 event:: { assert_event_name_is_valid, Event , EventId , Listeners } ,
3733 ipc:: { Invoke , InvokeHandler , InvokeResponder } ,
3834 pattern:: PatternJavascript ,
@@ -52,6 +48,7 @@ use crate::{
5248 Context , EventLoopMessage , Icon , Manager , Pattern , Runtime , Scopes , StateManager , Window ,
5349 WindowEvent ,
5450} ;
51+ use crate :: { event:: EmitArgs , window:: PageLoadPayload } ;
5552
5653#[ cfg( desktop) ]
5754use crate :: app:: GlobalMenuEventListener ;
@@ -232,7 +229,7 @@ pub struct InnerWindowManager<R: Runtime> {
232229 invoke_handler : Box < InvokeHandler < R > > ,
233230
234231 /// The page load hook, invoked when the webview performs a navigation.
235- on_page_load : Box < OnPageLoad < R > > ,
232+ on_page_load : Option < Arc < OnPageLoad < R > > > ,
236233
237234 config : Arc < Config > ,
238235 assets : Arc < dyn Assets > ,
@@ -339,7 +336,7 @@ impl<R: Runtime> WindowManager<R> {
339336 #[ allow( unused_mut) ] mut context : Context < impl Assets > ,
340337 plugins : PluginStore < R > ,
341338 invoke_handler : Box < InvokeHandler < R > > ,
342- on_page_load : Box < OnPageLoad < R > > ,
339+ on_page_load : Option < Arc < OnPageLoad < R > > > ,
343340 uri_scheme_protocols : HashMap < String , Arc < UriSchemeProtocol < R > > > ,
344341 state : StateManager ,
345342 window_event_listeners : Vec < GlobalWindowEventListener < R > > ,
@@ -685,6 +682,32 @@ impl<R: Runtime> WindowManager<R> {
685682 registered_scheme_protocols. push ( "ipc" . into ( ) ) ;
686683 }
687684
685+ let label = pending. label . clone ( ) ;
686+ let manager = self . clone ( ) ;
687+ let on_page_load_handler = pending. on_page_load_handler . take ( ) ;
688+ pending
689+ . on_page_load_handler
690+ . replace ( Box :: new ( move |url, event| {
691+ let payload = PageLoadPayload { url : & url, event } ;
692+
693+ if let Some ( w) = manager. get_window ( & label) {
694+ if let Some ( on_page_load) = & manager. inner . on_page_load {
695+ on_page_load ( & w, & payload) ;
696+ }
697+
698+ manager
699+ . inner
700+ . plugins
701+ . lock ( )
702+ . unwrap ( )
703+ . on_page_load ( & w, & payload) ;
704+ }
705+
706+ if let Some ( handler) = & on_page_load_handler {
707+ handler ( url, event) ;
708+ }
709+ } ) ) ;
710+
688711 #[ cfg( feature = "protocol-asset" ) ]
689712 if !registered_scheme_protocols. contains ( & "asset" . into ( ) ) {
690713 let asset_scope = self . state ( ) . get :: < crate :: Scopes > ( ) . asset_protocol . clone ( ) ;
@@ -869,16 +892,6 @@ impl<R: Runtime> WindowManager<R> {
869892 ( self . inner . invoke_handler ) ( invoke)
870893 }
871894
872- pub fn run_on_page_load ( & self , window : Window < R > , payload : PageLoadPayload ) {
873- ( self . inner . on_page_load ) ( window. clone ( ) , payload. clone ( ) ) ;
874- self
875- . inner
876- . plugins
877- . lock ( )
878- . expect ( "poisoned plugin store" )
879- . on_page_load ( window, payload) ;
880- }
881-
882895 pub fn extend_api ( & self , plugin : & str , invoke : Invoke < R > ) -> bool {
883896 self
884897 . inner
@@ -1376,7 +1389,7 @@ mod test {
13761389 context,
13771390 PluginStore :: default ( ) ,
13781391 Box :: new ( |_| false ) ,
1379- Box :: new ( |_ , _| ( ) ) ,
1392+ None ,
13801393 Default :: default ( ) ,
13811394 StateManager :: new ( ) ,
13821395 Default :: default ( ) ,
0 commit comments