UNPKG

@vue-async/module-loader

Version:
101 lines 3.56 kB
/** * @author Hubert * fork from https://github.com/kuitos/import-html-entry/blob/master/src/utils.js */ import warning from 'warning'; var isIE11 = typeof navigator !== 'undefined' && navigator.userAgent.indexOf('Trident') !== -1; function shouldSkipProperty(global, p) { if (!global.hasOwnProperty(p) || (!isNaN(p) && parseInt(p) < global.length)) return true; if (isIE11) { // https://github.com/kuitos/import-html-entry/pull/32,最小化 try 范围 try { return global[p] && global[p].parent === window; } catch (err) { return true; } } else { return false; } } // safari unpredictably lists some new globals first or second in object order var firstGlobalProp, secondGlobalProp, lastGlobalProp; function getGlobalProp(global) { var cnt = 0; var lastProp; var hasIframe = false; for (var p in global) { if (shouldSkipProperty(global, p)) continue; // 遍历 iframe,检查 window 上的属性值是否是 iframe,是则跳过后面的 first 和 second 判断 for (var i = 0; i < window.frames.length && !hasIframe; i++) { var frame = window.frames[i]; if (frame === global[p]) { hasIframe = true; break; } } if (!hasIframe && ((cnt === 0 && p !== firstGlobalProp) || (cnt === 1 && p !== secondGlobalProp))) return p; cnt++; lastProp = p; } if (lastProp !== lastGlobalProp) return lastProp; return; } function noteGlobalProps(global) { // alternatively Object.keys(global).pop() // but this may be faster (pending benchmarks) firstGlobalProp = secondGlobalProp = undefined; for (var p in global) { if (shouldSkipProperty(global, p)) continue; if (!firstGlobalProp) firstGlobalProp = p; else if (!secondGlobalProp) secondGlobalProp = p; lastGlobalProp = p; } return lastGlobalProp; } /** 加载 entry 脚本 */ export function execScript(entry, proxy) { if (proxy === void 0) { proxy = window; } return new Promise(function (resolve, reject) { noteGlobalProps(proxy); var script = proxy.document.createElement('script'); script.src = entry; script.onload = function () { var propName = getGlobalProp(proxy); var exports = propName ? proxy[propName] || {} : {}; resolve(exports); }; script.onerror = function (err) { warning(process.env.NODE_ENV === 'production', "[moduleLoader] script had a problem to create, entry\uFF1A".concat(entry)); reject(new Error("script load error, error: ".concat(err))); }; proxy.document.body.appendChild(script); }); } /** 加载 styles */ export function execStyles(styles, styleFor) { if (styles.length) { return Promise.all(styles.map(function (href) { return new Promise(function (resolve) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = href; styleFor && (link.dataset.styleFor = styleFor); link.onload = resolve; link.onerror = resolve; document.getElementsByTagName('head')[0].appendChild(link); }); })); } return Promise.resolve(); } //# sourceMappingURL=spa.js.map