1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- let callbacks = []
- function loadedTinymce() {
- // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2144
- // check is successfully downloaded script
- return window.tinymce
- }
- const dynamicLoadScript = (src, callback) => {
- const existingScript = document.getElementById(src)
- const cb = callback || function() {}
- if (!existingScript) {
- const script = document.createElement('script')
- script.src = src // src url for the third-party library being loaded.
- script.id = src
- document.body.appendChild(script)
- callbacks.push(cb)
- const onEnd = 'onload' in script ? stdOnEnd : ieOnEnd
- onEnd(script)
- }
- if (existingScript && cb) {
- if (loadedTinymce()) {
- cb(null, existingScript)
- } 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
- }
- }
- }
- export default dynamicLoadScript
|