UNPKG

@pit-front-end/utils

Version:

湖南创智艾泰克科技有限公司

52 lines (51 loc) 1.49 kB
class i { constructor(e) { this.eventHandlers = /* @__PURE__ */ new Map(), this.channel = new BroadcastChannel(e), this.setupListeners(); } setupListeners() { this.channel.addEventListener("message", (e) => { const { eventType: s, data: t } = e.data; this.trigger(s, t); }), window.addEventListener("beforeunload", () => this.close()); } // 发送事件到所有页签(包括自身) postMessage(e, s, t = !0) { t && this.trigger(e, s); try { this.channel.postMessage({ eventType: e, data: s }); } catch (n) { console.error("[BroadcastChannel] 消息发送失败", n); } } // 触发当前页签的事件处理函数 trigger(e, s) { const t = this.eventHandlers.get(e); t && t.forEach((n) => n(s)); } // 注册事件监听器 on(e, s) { return this.eventHandlers.has(e) || this.eventHandlers.set(e, /* @__PURE__ */ new Set()), this.eventHandlers.get(e).add(s), () => this.off(e, s); } // 注册一次性事件监听器 once(e, s) { const t = (n) => { s(n), this.off(e, t); }; this.on(e, t); } // 移除事件监听器 off(e, s) { const t = this.eventHandlers.get(e); t && (t.delete(s), t.size === 0 && this.eventHandlers.delete(e)); } // 清理资源 close() { this.channel.close(), this.eventHandlers.clear(); } } let a = null; const l = (r = "pit-global-channel") => (a || (a = new i(r)), a); export { i as default, l as getBroadcastService };