@@ -248,7 +248,8 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
248
248
private pingTimeoutTimer : NodeJS . Timer ;
249
249
private setTimeoutFn : typeof setTimeout ;
250
250
private clearTimeoutFn : typeof clearTimeout ;
251
- private offlineEventListener ;
251
+ private readonly beforeunloadEventListener : ( ) => void ;
252
+ private readonly offlineEventListener : ( ) => void ;
252
253
private upgrading : boolean ;
253
254
private maxPayload ?: number ;
254
255
@@ -352,17 +353,14 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
352
353
// Firefox closes the connection when the "beforeunload" event is emitted but not Chrome. This event listener
353
354
// ensures every browser behaves the same (no "disconnect" event at the Socket.IO level when the page is
354
355
// closed/reloaded)
355
- addEventListener (
356
- "beforeunload" ,
357
- ( ) => {
358
- if ( this . transport ) {
359
- // silently close the transport
360
- this . transport . removeAllListeners ( ) ;
361
- this . transport . close ( ) ;
362
- }
363
- } ,
364
- false
365
- ) ;
356
+ this . beforeunloadEventListener = ( ) => {
357
+ if ( this . transport ) {
358
+ // silently close the transport
359
+ this . transport . removeAllListeners ( ) ;
360
+ this . transport . close ( ) ;
361
+ }
362
+ } ;
363
+ addEventListener ( "beforeunload" , this . beforeunloadEventListener , false ) ;
366
364
}
367
365
if ( this . hostname !== "localhost" ) {
368
366
this . offlineEventListener = ( ) => {
@@ -912,6 +910,11 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
912
910
this . transport . removeAllListeners ( ) ;
913
911
914
912
if ( typeof removeEventListener === "function" ) {
913
+ removeEventListener (
914
+ "beforeunload" ,
915
+ this . beforeunloadEventListener ,
916
+ false
917
+ ) ;
915
918
removeEventListener ( "offline" , this . offlineEventListener , false ) ;
916
919
}
917
920
0 commit comments