js动态添加script脚本、检测script脚本、删除script脚本

复制代码
asyncLoadScript(context,{src,id}){//异步加载script脚本
            return new Promise(resolve=>{
                if(context.dispatch("checkIsLoadScript",src)){
                    if($("#"+id) && $("#"+id).src==src){//若script标签存在,则先删除
                        console.log("删除成功")
                        $("#"+id).remove(); 
                    }
                }
                let scriptNode = document.createElement("script");
                scriptNode.setAttribute("type", "text/javascript");
                scriptNode.setAttribute("charset", "utf-8");
                scriptNode.setAttribute("id",id);
                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();
                    }
                }
            })
        },
        // 检测是否加载了 script脚本 文件
        checkIsLoadScript(context,src) {
            let scriptObjs = document.getElementsByTagName('script');
            let reg=RegExp(src);
            for(let sObj of scriptObjs) {
                if (sObj.src.match(reg)) {
                    return true;
                }
            }
            return false;
        },
复制代码

 异步加载脚本

(function(d, s, id) {
                var js, fjs = d.getElementsByTagName(s)[0];
                if (d.getElementById(id)) return;
                js = d.createElement(s);
                js.id = id;
                js.src = "https://connect.facebook.net/en_US/sdk.js";
                fjs.parentNode.insertBefore(js, fjs);
            }(document, 'script', 'facebook-jssdk'));

 

 

posted @   古墩古墩  Views(2904)  Comments(0Edit  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示