ice.fo.utils
Version:
77 lines (71 loc) • 2.18 kB
JavaScript
/* eslint-disable prefer-rest-params */
const EditorSignal = {
get signaler() {
return window.parent.___globalEventSystem;
},
get EDITOR_ID() {
return window.$nuxt.$route.query.__editorId;
},
_events: {},
/**
* This is required. Must run before all
*/
init() {
console.log('[ WindowUtils - EditorSignal ]', 'Initializing Builder Signal Communication');
const domainTokens = window.location.hostname.split('.').reverse();
let domainScope = '';
if (domainTokens.length > 3 && (domainTokens[1] === 'co' || domainTokens[1] === 'or' || domainTokens[1] === 'pe')) {
domainScope = [domainTokens[2], domainTokens[1], domainTokens[0]].join('.');
} else if (domainTokens.length === 1) {
domainScope = domainTokens[0];
} else {
domainScope = [domainTokens[1], domainTokens[0]].join('.');
}
try {
document.domain = domainScope;
} catch (e) {
console.error('Fail nuxt domain setting', e);
}
if (!this.signaler) {
return false;
}
return true;
},
listen(eventName, func) {
this._events[eventName] = func;
this.signaler.on(`${eventName}[${this.EDITOR_ID}]`, function onSignal() {
console.log('[ WindowUtils - EditorSignal ]', 'Incomming Event:', eventName, arguments);
func(...arguments);
});
},
emit(eventName, data) {
if (this._events[eventName]) {
this._events[eventName](data);
}
return this._emitToParentWindow(this.makeMainEventName(this.EDITOR_ID), eventName, data);
},
makeMainEventName(pageId) {
return `__editor_main_${pageId}`;
},
/**
* 초기 도메인 세팅 후에 일시적으로 크로스도메인문제로 블럭되는데 성공할 때 까지 시도한다.
* @param editorId
* @param eventName
* @param data
* @constructor
*/
_emitToParentWindow(editorId, eventName, data) {
return new Promise((resolve) => {
const tryDomain = () => {
try {
this.signaler.emit(editorId, eventName, data);
resolve();
} catch (e) {
setTimeout(tryDomain, 1);
}
};
tryDomain();
});
},
};
export default EditorSignal;