2020-03-28 03:46:34 +08:00

60 lines
1.3 KiB
JavaScript

import EventEmitter from 'events';
import Debug from 'debug';
const debug = Debug('utils:postMessager');
EventEmitter.defaultMaxListeners = 100;
export class InnerMessager extends EventEmitter {
constructor() {
super();
this.handleReceive = this.handleReceive.bind(this);
window.addEventListener('message', this.handleReceive, false);
}
sendMsg(type, data, targetOrigin = '*') {
window.parent &&
window.parent.postMessage(
{
type,
data,
},
targetOrigin,
);
}
handleReceive(e) {
if (!e.data || !e.data.type) return;
this.emit(e.data.type, e.data.data);
}
destroy() {
window.removeEventListener('message', this.handleReceive);
}
}
export class OuterMessager extends EventEmitter {
constructor(innerWindow) {
super();
this.innerWindow = innerWindow;
this.handleReceive = this.handleReceive.bind(this);
window.addEventListener('message', this.handleReceive, false);
}
sendMsg(type, data, targetOrigin = '*') {
this.innerWindow &&
this.innerWindow.postMessage(
{
type,
data,
},
targetOrigin,
);
}
handleReceive(e) {
if (!e.data || !e.data.type) return;
this.emit(e.data.type, e.data.data);
}
destroy() {
window.removeEventListener('message', this.handleReceive);
}
}