class ContentMessageCenter { constructor() { this.iframeMap = new Map(); this.messageCallbackMap = new Map(); // this.listen() } findIframeById(id) { let target = this.iframeMap.get(id); if (!target) { target = document.getElementById(id) this.iframeMap.set('id', target) } return target } send({ info, data }) { const target = this.findIframeById(info.iframeId); target && target.contentWindow.postMessage({ info, data }, '*') } sendAll({ info, data }) { const targets = document.querySelectorAll('iframe[data-card=denet]') || [] targets.forEach((item) => { item.contentWindow.postMessage({ info, data }, '*') }) } // ---- don't use ---- // add(actionType, callback) { // let activeQuene = this.messageCallbackMap.get(actionType); // if (activeQuene?.length > 0) { // activeQuene.push(callback) // } else { // this.messageCallbackMap.set(actionType, [callback]) // } // } // ---- don't use ---- // listen() { // window.addEventListener('message', (e) => { // const { actionType, data } = e.data; // console.log('get message in content ...', actionType, data) // const quene = this.messageCallbackMap.get(actionType) || []; // while (quene.length > 0) { // let callback = quene.pop(); // callback(data) // } // }) // } } const contentMessageCenter = new ContentMessageCenter(); export default contentMessageCenter;