From 82e69d789caf9a70bbf383762dd04ea8baa14562 Mon Sep 17 00:00:00 2001 From: Majeed Suleiman Date: Wed, 16 Apr 2025 13:42:20 +0200 Subject: [PATCH] Make phxWindow.addEventListener optional Co-authored-by: Tomislav Markanovic --- assets/js/phoenix/socket.js | 7 ++++++- assets/test/socket_test.js | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/assets/js/phoenix/socket.js b/assets/js/phoenix/socket.js index a92452196e..e702d8ab8e 100644 --- a/assets/js/phoenix/socket.js +++ b/assets/js/phoenix/socket.js @@ -108,6 +108,10 @@ import Timer from "./timer" * removeItem(keyName) { delete this.storage[keyName] } * setItem(keyName, keyValue) { this.storage[keyName] = keyValue } * } + * + * @param {boolean} [opts.disableWindowEventListeners] - Boolean that determines if window event listeners should be active + * + * Defaults to false. * */ export default class Socket { @@ -137,7 +141,8 @@ export default class Socket { this.decode = this.defaultDecoder } let awaitingConnectionOnPageShow = null - if(phxWindow && phxWindow.addEventListener){ + this.disableWindowEventListeners = opts.disableWindowEventListeners || false + if(!this.disableWindowEventListeners && phxWindow && phxWindow.addEventListener){ phxWindow.addEventListener("pagehide", _e => { if(this.conn){ this.disconnect() diff --git a/assets/test/socket_test.js b/assets/test/socket_test.js index ebbe958df6..f4cd548fce 100644 --- a/assets/test/socket_test.js +++ b/assets/test/socket_test.js @@ -39,6 +39,7 @@ describe("with transports", function (){ expect(socket.longpollerTimeout).toBe(20000) expect(socket.heartbeatIntervalMs).toBe(30000) expect(socket.logger).toBeNull() + expect(socket.disableWindowEventListeners).toBe(false) expect(socket.binaryType).toBe("arraybuffer") expect(typeof socket.reconnectAfterMs).toBe("function") }) @@ -64,6 +65,7 @@ describe("with transports", function (){ logger: customLogger, reconnectAfterMs: customReconnect, params: {one: "two"}, + disableWindowEventListeners: true }) expect(socket.timeout).toBe(40000) @@ -72,6 +74,7 @@ describe("with transports", function (){ expect(socket.transport).toBe(customTransport) expect(socket.logger).toBe(customLogger) expect(socket.params()).toEqual({one: "two"}) + expect(socket.disableWindowEventListeners).toBe(true) }) describe("with Websocket", function (){