61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
/**
|
||
* 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)
|
||
}
|
||
})
|
||
}
|