@orca-fe/x-map
Version:
59 lines (58 loc) • 1.71 kB
JavaScript
const cache = new Map();
export default function loadScript(src, callback = (e) => { }) {
let p = cache.get(src);
if (!p) {
p = new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = src;
script.onload = function (e) {
resolve(e);
};
script.onerror = function (event, source, lineno, colno, error) {
cache.delete(src);
reject(error);
};
document.body.appendChild(script);
});
cache.set(src, p);
}
return p
.then(() => {
callback();
})
.catch((err) => {
callback(err);
});
}
const cssCache = new Map();
export function loadCSS(src, callback = (e) => { }) {
if (cssCache.has(src)) {
callback();
return () => {
cssCache.delete(src);
const cssElement = cssCache.get(src);
if (cssElement && document.contains(cssElement)) {
document.removeChild(cssElement);
}
};
}
const link = document.createElement('link');
link.href = src;
link.type = 'text/css';
link.rel = 'stylesheet';
cssCache.set(src, link);
link.onload = function (e) {
callback();
};
link.onerror = function (event, source, lineno, colno, error) {
cssCache.delete(src);
callback(error);
};
document.head.appendChild(link);
return () => {
cssCache.delete(src);
if (document.head.contains(link)) {
document.head.removeChild(link);
}
};
}