Files
xw_admin/src/utils/load.js
T
2024-06-24 18:52:21 +08:00

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)
}
})
}