ice.fo.utils
Version:
36 lines (31 loc) • 1.01 kB
JavaScript
export default function execScript(
source,
{ isolate = true, context = { $axios: window.$nuxt.$axios, $modal: window.$nuxt.$modal } } = {},
) {
return new Promise((resolve) => {
if (isolate) {
const frame = document.createElement('iframe');
document.body.append(frame);
/**
* primitive value
* function
* promise
* multi-function
*/
const script = frame.contentWindow.document.createElement('script');
script.type = 'text/javascript';
script.innerHTML = `
Promise.resolve(eval(\`${source}\`)).then((result) => {
window.postMessage({ event: 'result', data: result })
})`;
Object.assign(frame.contentWindow, context);
frame.contentWindow.document.body.appendChild(script);
frame.contentWindow.onmessage = function onMessage({ data: { event, data } }) {
if (event == 'result') {
document.body.removeChild(frame);
resolve();
}
};
}
});
}