@@ -24,6 +24,7 @@ class PostMessageTransport extends Transport {
2424 this . uri = uri ;
2525 this . postMessageID = `post-message-transport-${ Math . random ( ) } ` ;
2626 }
27+
2728 public createWindow ( uri : string ) : Promise < Window | null > {
2829 return new Promise ( ( resolve , reject ) => {
2930 let frame : Window | null ;
@@ -33,19 +34,22 @@ class PostMessageTransport extends Transport {
3334 } , 3000 ) ;
3435 } ) ;
3536 }
37+
38+ private messageHandler = ( ev : MessageEvent ) => {
39+ if ( ev . origin === window . origin ) {
40+ return ;
41+ }
42+ this . transportRequestManager . resolveResponse ( JSON . stringify ( ev . data ) ) ;
43+ }
44+
3645 public connect ( ) : Promise < any > {
3746 const urlRegex = / ^ ( h t t p | h t t p s ) : \/ \/ .* $ / ;
3847 return new Promise ( async ( resolve , reject ) => {
3948 if ( ! urlRegex . test ( this . uri ) ) {
4049 reject ( new Error ( "Bad URI" ) ) ;
4150 }
4251 this . frame = await this . createWindow ( this . uri ) ;
43- window . addEventListener ( "message" , ( ev : MessageEvent ) => {
44- if ( ev . origin === window . origin ) {
45- return ;
46- }
47- this . transportRequestManager . resolveResponse ( JSON . stringify ( ev . data ) ) ;
48- } ) ;
52+ window . addEventListener ( "message" , this . messageHandler ) ;
4953 resolve ( ) ;
5054 } ) ;
5155 }
@@ -60,6 +64,7 @@ class PostMessageTransport extends Transport {
6064
6165 public close ( ) : void {
6266 if ( this . frame ) {
67+ window . removeEventListener ( "message" , this . messageHandler ) ;
6368 ( this . frame as Window ) . close ( ) ;
6469 }
6570 }
0 commit comments