@@ -568,17 +568,20 @@ tauri::Builder::default()
568
568
} ) ) ;
569
569
}
570
570
571
- if let Some ( on_page_load_handler ) = self . on_page_load_handler . take ( ) {
572
- let label = pending . label . clone ( ) ;
573
- let manager = manager . manager_owned ( ) ;
574
- pending
575
- . on_page_load_handler
576
- . replace ( Box :: new ( move |url , event| {
577
- if let Some ( w ) = manager . get_webview ( & label ) {
578
- on_page_load_handler ( w , PageLoadPayload { url : & url , event } ) ;
571
+ let label_ = pending . label . clone ( ) ;
572
+ let manager_ = manager . manager_owned ( ) ;
573
+ pending
574
+ . on_page_load_handler
575
+ . replace ( Box :: new ( move |url , event| {
576
+ if let Some ( w ) = manager_ . get_webview ( & label_ ) {
577
+ if let PageLoadEvent :: Finished = event {
578
+ w . unlisten_all_js ( ) ;
579
579
}
580
- } ) ) ;
581
- }
580
+ if let Some ( handler) = self . on_page_load_handler . as_ref ( ) {
581
+ handler ( w, PageLoadPayload { url : & url, event } ) ;
582
+ }
583
+ }
584
+ } ) ) ;
582
585
583
586
manager. manager ( ) . webview . prepare_webview (
584
587
manager,
@@ -1317,6 +1320,12 @@ fn main() {
1317
1320
Ok ( ( ) )
1318
1321
}
1319
1322
1323
+ /// Unregister all JS event listeners.
1324
+ pub ( crate ) fn unlisten_all_js ( & self ) {
1325
+ let listeners = self . manager ( ) . listeners ( ) ;
1326
+ listeners. unlisten_all_js ( self . label ( ) ) ;
1327
+ }
1328
+
1320
1329
pub ( crate ) fn emit_js ( & self , emit_args : & EmitArgs , target : & EventTarget ) -> crate :: Result < ( ) > {
1321
1330
self . eval ( & crate :: event:: emit_js_script (
1322
1331
self . manager ( ) . listeners ( ) . function_name ( ) ,
0 commit comments