美文网首页
JS实现动态加载脚本

JS实现动态加载脚本

作者: sphenginx | 来源:发表于2019-10-12 17:07 被阅读0次

前记

本文是基于ES6语法的 asyncawait 语句, 实现 JS 动态 加载 脚本 。

具体代码

考虑回调方法可能需要有返回值, 这里只实现了动态加载js脚本,回调方法在回调之后写即可

本文以 Vue 为例, 自带去重功能

methods: {
        // 合并数组或对象 
        // raw 是原对象
        // ext 是需要合并的对象
        // override 是否覆盖 raw 原来的key, 默认会覆盖
        extend(raw, ext, override = true) {
            for(let key in ext){
                if(!raw.hasOwnProperty(key) || override){
                    raw[key]=ext[key];
                }
            }
            return raw;
        },
        // 动态加载 js 及 回调
        async  loadScript(src) {
            await new Promise(resolve => {
                // 如果已经加载了本js,直接调用回调
                if (this._checkIsLoadScript(src)) {
                    resolve();
                }
                let scriptNode = document.createElement("script");
                scriptNode.setAttribute("type", "text/javascript");
                scriptNode.setAttribute("src", src);
                document.body.appendChild(scriptNode);
                if (scriptNode.readyState) { //IE 判断
                    scriptNode.onreadystatechange = () => {
                        if (scriptNode.readyState == "complete" || scriptNode.readyState == 'loaded') {
                            resolve();
                        }
                    }
                } else {
                    scriptNode.onload = () => {
                        console.log("script loaded");
                        resolve();
                    }
                }
            })
        },
        // 检测是否加载了 js 文件
        _checkIsLoadScript(src) {
            let scriptObjs = document.getElementsByTagName('script');
            for(let sObj of scriptObjs) {
                if (sObj.src == src) {
                    return true;
                }
            }
            return false;
        }
}

调用的方法 必须是 async 方法, 用 await 调用即可, 例如:

async  loginByWechat() {
      await this.loadScript("wechat.js");
      ……
}

如此, 就可以顺序写代码了……

相关文章

  • JS实现动态加载脚本

    前记 本文是基于ES6语法的 async 和 await 语句, 实现 JS 动态 加载 脚本 。 具体代码 考...

  • 浏览器性能提升--js加载优化

    动态加载js脚本函数封装优点:js代码加载不阻塞浏览器其他的执行

  • JavaScript动态加载js和css

    动态加载js 参考:javascript 性能优化 动态加载css 参考: 动态加载 css 方法实现和深入解析 ...

  • JavaScript 性能优化小记

    加载与运行 延期脚本 js文件要在dom加载完成时才会被下载 动态脚本元素 var script= d...

  • (转)LABJS源码浅析

    LABJS源码浅析 LABjs里的动态加载脚本文件,是指页面的js脚本执行时,通过多种方法去加载外部的js(主要区...

  • 动态加载JS脚本

    头脑笨不可怕,但是我认真啊,但是我刻苦啊,但是我爱学啊?。 总结:当CDN文件丢失或者加载失败的时候 使用判断的方...

  • 2019-05-30

    Javascript之动态加载脚本和样式 //动态加载脚本 function loadScript(url){ ...

  • 如何动态加载js?

    如何动态加载js?如何使用js实现多个html页面访问同一个常量?如何不使用框架,只有Html时,动态加载文件? ...

  • 通过JS加载脚本

    目的:通过js加载其他脚本原理:动态的创建 元素兼容:IE使用 元素的 onreadystatechang...

  • 网页优化

    1. 资源代码压缩合并,减少HTTP请求 2. 非核心代码的异步加载 异步加载方式:动态脚本加载(js创建SCRI...

网友评论

      本文标题:JS实现动态加载脚本

      本文链接:https://www.haomeiwen.com/subject/llxcmctx.html