UNPKG

@pit-front-end/utils

Version:

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

2 lines (1 loc) 1.07 kB
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});class i{constructor(e){this.eventHandlers=new Map,this.channel=new BroadcastChannel(e),this.setupListeners()}setupListeners(){this.channel.addEventListener("message",e=>{const{eventType:t,data:s}=e.data;this.trigger(t,s)}),window.addEventListener("beforeunload",()=>this.close())}postMessage(e,t,s=!0){s&&this.trigger(e,t);try{this.channel.postMessage({eventType:e,data:t})}catch(n){console.error("[BroadcastChannel] 消息发送失败",n)}}trigger(e,t){const s=this.eventHandlers.get(e);s&&s.forEach(n=>n(t))}on(e,t){return this.eventHandlers.has(e)||this.eventHandlers.set(e,new Set),this.eventHandlers.get(e).add(t),()=>this.off(e,t)}once(e,t){const s=n=>{t(n),this.off(e,s)};this.on(e,s)}off(e,t){const s=this.eventHandlers.get(e);s&&(s.delete(t),s.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);exports.default=i;exports.getBroadcastService=l;