UNPKG

ice.fo.utils

Version:

36 lines (31 loc) 1.01 kB
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(); } }; } }); }