|
|
|
import $ from "jquery";
|
|
|
|
|
|
|
|
const _LOADED = {}; // alex:保存加载过的
|
|
|
|
function loadReady(src, must) {
|
|
|
|
const $scripts = $("head script, body script");
|
|
|
|
$.each($scripts, (i, item) => {
|
|
|
|
if (item.src.indexOf(src) !== -1) {
|
|
|
|
_LOADED[src] = true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
const $links = $("head link");
|
|
|
|
$.each($links, (i, item) => {
|
|
|
|
if (item.href.indexOf(src) !== -1 && must) {
|
|
|
|
_LOADED[src] = false;
|
|
|
|
$(item).remove();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param src
|
|
|
|
* @param ext
|
|
|
|
* @param must 强行加载
|
|
|
|
*/
|
|
|
|
export function $import(src, ext, must) {
|
|
|
|
loadReady(src, must);
|
|
|
|
// alex:如果已经加载过了的,直接return
|
|
|
|
if (_LOADED[src] === true) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (ext === "css") {
|
|
|
|
const link = document.createElement("link");
|
|
|
|
link.rel = "stylesheet";
|
|
|
|
link.type = "text/css";
|
|
|
|
link.href = src;
|
|
|
|
const head = document.getElementsByTagName("head")[0];
|
|
|
|
head.appendChild(link);
|
|
|
|
_LOADED[src] = true;
|
|
|
|
} else {
|
|
|
|
// alex:这里用同步调用的方式,必须等待ajax完成
|
|
|
|
$.ajax({
|
|
|
|
url: src,
|
|
|
|
dataType: "script", // alex:指定dataType为script,jquery会帮忙做globalEval的事情
|
|
|
|
async: false,
|
|
|
|
cache: true,
|
|
|
|
complete(res, status) {
|
|
|
|
/*
|
|
|
|
* alex:发现jquery会很智能地判断一下返回的数据类型是不是script,然后做一个globalEval
|
|
|
|
* 所以当status为success时就不需要再把其中的内容加到script里面去了
|
|
|
|
*/
|
|
|
|
if (status === "success") {
|
|
|
|
_LOADED[src] = true;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|