/**
|
* loadJS 异步加载远程JS
|
* @constructor
|
* @param {string} src - 必填,需要加载的URL路径
|
* @param {string} keyName - 必填,唯一key和JS返回的全局的对象名
|
* @param {string} callbackName - 非必填,如果远程JS有callback,则可更有效的判断是否完成加载
|
*/
|
export function loadJS (src, keyName, callbackName) {
|
return new Promise((resolve, reject) => {
|
let has = document.head.querySelector("script[loadKey="+keyName+"]")
|
if(has){
|
return resolve(window[keyName])
|
}
|
let script = document.createElement("script")
|
script.type = "text/javascript"
|
script.src = src
|
script.setAttribute("loadKey", keyName)
|
document.head.appendChild(script)
|
script.onload = () => {
|
if(callbackName){
|
window[callbackName] = () => {
|
return resolve(window[keyName])
|
}
|
}else{
|
setTimeout(()=>{
|
return resolve(window[keyName])
|
},50)
|
}
|
}
|
script.onerror = (err) => {
|
return reject(err)
|
}
|
})
|
}
|
|
/**
|
* loadCSS 异步加载远程css
|
* @constructor
|
* @param {string} src - 必填,需要加载的URL路径
|
* @param {string} keyName - 必填,唯一key
|
*/
|
export function loadCSS (src, keyName) {
|
return new Promise((resolve, reject) => {
|
let has = document.head.querySelector("link[loadKey="+keyName+"]")
|
if(has){
|
return resolve()
|
}
|
let link = document.createElement('link')
|
link.rel = "stylesheet"
|
link.href = src
|
link.setAttribute("loadKey", keyName)
|
document.head.appendChild(link)
|
link.onload = () => {
|
return resolve()
|
}
|
link.onerror = (err) => {
|
return reject(err)
|
}
|
})
|
}
|