From b06b040e5c976b47ed1b30f0fd06cebef034b33a Mon Sep 17 00:00:00 2001 From: kerms Date: Fri, 25 Apr 2025 10:01:26 +0200 Subject: [PATCH] feat(websocket): IOS14 compatibility due to unsupported BroadcastChannel --- src/composables/broadcastChannelDef.ts | 21 +++++++++++++++---- src/composables/websocket/websocketService.ts | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/composables/broadcastChannelDef.ts b/src/composables/broadcastChannelDef.ts index 48cc7af..0f4dbd9 100644 --- a/src/composables/broadcastChannelDef.ts +++ b/src/composables/broadcastChannelDef.ts @@ -1,4 +1,17 @@ -export const toServer = new BroadcastChannel("toServer"); -export const toClient = new BroadcastChannel("toClient"); -export const toWebsocketCtrl = new BroadcastChannel("toWebsocketCtrl"); -export const toClientCtrl = new BroadcastChannel("toClientCtrl"); +// Define a fallback mock class only if BroadcastChannel is undefined +const BC: typeof BroadcastChannel = typeof BroadcastChannel !== 'undefined' + ? BroadcastChannel + : class { + constructor(name: string) { + // no-op + } + postMessage(_: any) {} + close() {} + addEventListener(_: string, __: any) {} + removeEventListener(_: string, __: any) {} + } as unknown as typeof BroadcastChannel; + +export const toServer = new BC("toServer"); +export const toClient = new BC("toClient"); +export const toWebsocketCtrl = new BC("toWebsocketCtrl"); +export const toClientCtrl = new BC("toClientCtrl"); \ No newline at end of file diff --git a/src/composables/websocket/websocketService.ts b/src/composables/websocket/websocketService.ts index 902588d..a21feae 100644 --- a/src/composables/websocket/websocketService.ts +++ b/src/composables/websocket/websocketService.ts @@ -127,7 +127,7 @@ class WebsocketClassic implements IWebsocketService{ } export function getWebsocketService(): IWebsocketService { - if (typeof SharedWorker !== 'undefined') { + if (typeof SharedWorker !== 'undefined' && typeof localStorage !== 'undefined') { return WebsocketShared.getInstance(); } else { return WebsocketClassic.getInstance();