From 312d3883f08c6ae3de52bb2b1add2165d16e2c06 Mon Sep 17 00:00:00 2001 From: sakuya <81883387@qq.com> Date: Mon, 30 May 2022 00:19:41 +0800 Subject: [PATCH] =?UTF-8?q?ADD=20utils=20load=20=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E5=8A=A0=E8=BD=BDJS=EF=BC=8CCSS=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/load.js | 60 ++++++++++++++++++++++ src/views/other/loadJS.vue | 102 +++++++++++++++++++++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 src/utils/load.js create mode 100644 src/views/other/loadJS.vue diff --git a/src/utils/load.js b/src/utils/load.js new file mode 100644 index 00000000..fa3ebc21 --- /dev/null +++ b/src/utils/load.js @@ -0,0 +1,60 @@ +/** + * 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) + } + }) +} diff --git a/src/views/other/loadJS.vue b/src/views/other/loadJS.vue new file mode 100644 index 00000000..8ebe4c31 --- /dev/null +++ b/src/views/other/loadJS.vue @@ -0,0 +1,102 @@ + + + + + + 演示了使用 @/utils/load 加载百度地图的JSAPI和它的GL库BMapGLLib + 当然也可以像传统网页一样加载任何JS和CSS,甚至可以是JQ。 + + + + + + + + + + + + + +
演示了使用 @/utils/load 加载百度地图的JSAPI和它的GL库BMapGLLib
当然也可以像传统网页一样加载任何JS和CSS,甚至可以是JQ。