Sitelet https://github.com/open-rpc/client-js/commit/844af195ac1098002630b68a309f03fe1a8e519c
Skip to content

Commit 844af19

Browse files
committed
fix: remove PostMessage EventListener on close
1 parent 045365c commit 844af19

1 file changed

Lines changed: 11 additions & 6 deletions

File tree

‎src/transports/PostMessageWindowTransport.ts‎

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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 = /^(http|https):\/\/.*$/;
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

Comments
 (0)