broadcast messages from one popup over parent to others
This commit is contained in:
parent
ec2907c0a6
commit
47ac68c34a
|
@ -24,7 +24,11 @@ class PopUps {
|
|||
if (~pos) this.wins.splice(pos, 1);
|
||||
}
|
||||
|
||||
dispatch(msg) {
|
||||
/*
|
||||
* send message to all popups
|
||||
* except the ignore one
|
||||
*/
|
||||
dispatch(msg, ignore = null) {
|
||||
const { wins } = this;
|
||||
try {
|
||||
for (let i = 0; i < wins.length; i += 1) {
|
||||
|
@ -34,7 +38,9 @@ class PopUps {
|
|||
i -= 1;
|
||||
continue;
|
||||
}
|
||||
win.postMessage(msg, this.origin);
|
||||
if (win !== ignore) {
|
||||
win.postMessage(msg, this.origin);
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
return false;
|
||||
|
|
|
@ -17,7 +17,9 @@ window.addEventListener('beforeunload', () => {
|
|||
|
||||
export default (store) => (next) => (action) => {
|
||||
if (action instanceof MessageEvent) {
|
||||
if (action.origin !== origin) {
|
||||
if (action.origin !== origin
|
||||
|| !action.data.type
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
if (action.data.type === 't/UNLOAD') {
|
||||
|
|
|
@ -9,7 +9,9 @@ import popUps from '../../core/popUps';
|
|||
|
||||
export default (store) => (next) => (action) => {
|
||||
if (action instanceof MessageEvent) {
|
||||
if (action.origin !== window.location.origin) {
|
||||
if (action.origin !== window.location.origin
|
||||
|| !action.data.type
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
if (action.data.type === 't/UNLOAD') {
|
||||
|
@ -23,6 +25,8 @@ export default (store) => (next) => (action) => {
|
|||
);
|
||||
popUps.add(action.source);
|
||||
console.log('popup added');
|
||||
} else if (action.data.type.startsWith('s/')) {
|
||||
popUps.dispatch(action.data, action.source);
|
||||
}
|
||||
return next(action.data);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue