Skip to main content

动态加载资源

/** * 通过插入标签以加载 js/css 文件 * @param {String} url 需要载入的 js/css url * @param {String} name 文件载入后挂载到 window 下的变量名 * @param {String} type 文件类型 默认取后缀名 */export function asyncRequire(url: string, name?: string, type?: 'js' | 'css') {  return new Promise((resolve, reject) => {    const head = document.head || document.getElementsByTagName('head')[0] || document.body    const filePath = url.split('?')[0]    const ext = filePath.substring(filePath.lastIndexOf('.') + 1)
    if (document.getElementById(`async-require-${name || 'unknown'}`)) {      return resolve(name ? window[name] : 'loaded')    }
    let element: HTMLScriptElement | HTMLLinkElement    if (ext == 'js' || type == 'js') {      element = document.createElement('script')      element.src = url      element.onload = (e) => resolve(name ? window[name] : e)    } else if (ext == 'css' || type == 'css') {      element = document.createElement('link')      element.rel = 'stylesheet'      element.type = 'text/css'      element.href = url      element.onload = resolve    } else {      return console.warn('好像有点不对劲...请指定文件类型: js | css')    }
    element.id = `async-require-${name}`    element.onerror = reject    head.appendChild(element)  })}