|
|
let callbacks = []
|
|
|
|
|
|
function loadSuccess(key) {
|
|
|
// to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2144
|
|
|
// check is successfully downloaded script
|
|
|
return window[key]
|
|
|
}
|
|
|
|
|
|
const load = (src, type, callback) => {
|
|
|
if(type=='link'){
|
|
|
|
|
|
loadStyle(src, callback)
|
|
|
}else{
|
|
|
let loadKey = ''
|
|
|
if(src.indexOf('tinymce')>=0){
|
|
|
loadKey = 'tinymce'
|
|
|
}else if(src.indexOf('codemirror')>=0){
|
|
|
loadKey = 'CodeMirror'
|
|
|
}
|
|
|
const scriptTag = document.getElementById(src)
|
|
|
//const cb = callback || function() {}
|
|
|
if (!scriptTag) {
|
|
|
const script = document.createElement('script')
|
|
|
script.src = src // src url for the third-party library being loaded.
|
|
|
script.id = src
|
|
|
script.onload=()=>callback()
|
|
|
script.onerror=()=>callback('加载失败:'+src)
|
|
|
document.body.appendChild(script)
|
|
|
//callbacks.push(cb)
|
|
|
// const onEnd = 'onload' in script ? stdOnEnd : ieOnEnd
|
|
|
// onEnd(script)
|
|
|
}else{
|
|
|
if (loadSuccess(loadKey)) {
|
|
|
callback()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (scriptTag) {
|
|
|
/* else {
|
|
|
callbacks.push(cb)
|
|
|
}*/
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function stdOnEnd(script) {
|
|
|
script['onload'] = function() {
|
|
|
// this.onload = null here is necessary
|
|
|
// because even IE9 works not like others
|
|
|
this.onerror = this.onload = null
|
|
|
for (const cb of callbacks) {
|
|
|
cb(null, script)
|
|
|
}
|
|
|
callbacks = null
|
|
|
}
|
|
|
script['onerror'] = function() {
|
|
|
this.onerror = this.onload = null
|
|
|
cb(new Error('Failed to load ' + src), script)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function ieOnEnd(script) {
|
|
|
script.onreadystatechange = function() {
|
|
|
if (this.readyState !== 'complete' && this.readyState !== 'loaded') return
|
|
|
this.onreadystatechange = null
|
|
|
for (const cb of callbacks) {
|
|
|
cb(null, script) // there is no way to catch loading errors in IE8
|
|
|
}
|
|
|
callbacks = null
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function loadStyle(src, callback) {
|
|
|
const link = document.getElementById(src)
|
|
|
if (!link) {
|
|
|
const link = document.createElement('link')
|
|
|
link.setAttribute("rel", "stylesheet");
|
|
|
link.setAttribute("type", "text/css");
|
|
|
link.setAttribute("href", src);
|
|
|
link.id = src
|
|
|
let heads = document.getElementsByTagName("head")
|
|
|
if(heads.length){
|
|
|
heads[0].appendChild(link)
|
|
|
}else{
|
|
|
document.documentElement.appendChild(link)
|
|
|
}
|
|
|
}
|
|
|
callback();
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
export default load
|