1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- class MessageCenter {
- 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(id, actionType, data) {
- const target = this.findIframeById(id);
- target && target.contentWindow.postMessage({
- actionType,
- 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 messageCenter = new MessageCenter();
- export default messageCenter;
|