mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-30 17:58:54 +00:00
121 lines
2.4 KiB
JavaScript
121 lines
2.4 KiB
JavaScript
(() => {
|
|
|
|
class ESX {
|
|
|
|
constructor() {
|
|
|
|
this.frames = {};
|
|
this.modulePath = '../modules';
|
|
|
|
window.addEventListener('message', e => {
|
|
|
|
for(let name in this.frames) {
|
|
if(this.frames[name].iframe.contentWindow === e.source) {
|
|
this.onFrameMessage(name, e.data);
|
|
return;
|
|
}
|
|
}
|
|
|
|
this.onMessage(e.data);
|
|
|
|
});
|
|
|
|
$.post('http://es_extended/nui_ready', '{}');
|
|
|
|
}
|
|
|
|
createFrame(name, url, visible = true) {
|
|
|
|
const frame = document.createElement('div');
|
|
const iframe = document.createElement('iframe');
|
|
|
|
frame.appendChild(iframe);
|
|
|
|
iframe.src = url;
|
|
this.frames[name] = {frame, iframe};
|
|
|
|
this.frames[name].iframe.addEventListener('message', e => this.onFrameMessage(name, e.data));
|
|
this.frames[name].frame.style.pointerEvents = 'none';
|
|
|
|
document.querySelector('#frames').appendChild(frame);
|
|
|
|
if(!visible)
|
|
this.hideFrame(name);
|
|
|
|
return this.frames[name];
|
|
|
|
}
|
|
|
|
destroyFrame(name) {
|
|
document.querySelector('#frames').removeChild(this.frames[name].frame);
|
|
this.frames[name].frame.remove();
|
|
}
|
|
|
|
showFrame(name) {
|
|
this.frames[name].frame.style.display = 'block';
|
|
}
|
|
|
|
hideFrame(name) {
|
|
this.frames[name].frame.style.display = 'none';
|
|
}
|
|
|
|
focusFrame(name) {
|
|
|
|
for(let k in this.frames) {
|
|
|
|
if(k === name)
|
|
this.frames[k].frame.style.pointerEvents = 'all';
|
|
else
|
|
this.frames[k].frame.style.pointerEvents = 'none';
|
|
}
|
|
|
|
this.frames[name].iframe.contentWindow.focus();
|
|
|
|
}
|
|
|
|
onMessage(msg) {
|
|
|
|
if(msg.target) {
|
|
|
|
if(this.frames[msg.target])
|
|
this.frames[msg.target].iframe.contentWindow.postMessage(msg.data);
|
|
else
|
|
console.error('[esx:nui] cannot find frame : ' + msg.target);
|
|
|
|
} else {
|
|
|
|
switch(msg.action) {
|
|
|
|
case 'create_frame' : {
|
|
this.createFrame(msg.name, msg.url, msg.visible);
|
|
break;
|
|
}
|
|
|
|
case 'destroy_frame' : {
|
|
this.destroyFrame(msg.name);
|
|
break;
|
|
}
|
|
|
|
case 'focus_frame' : {
|
|
this.focusFrame(msg.name);
|
|
break;
|
|
}
|
|
|
|
default: break;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
onFrameMessage(name, msg) {
|
|
$.post('http://es_extended/frame_message', JSON.stringify({name, msg}));
|
|
}
|
|
|
|
}
|
|
|
|
ESX = new ESX();
|
|
|
|
})();
|