JS练习 -- 动态加载JS

导读

  • 日期:2022-1-18

分析网页时,经常遇到一些库未加载的情况,比如想使用axios库,该网站本身未加载,这时候就需要通过js加载。

通过CDN网站获取js的url

这里以axios为例。

  • https://www.bootcdn.cn/
    • https://www.bootcdn.cn/axios
    • https://cdn.jsdelivr.net/npm/axios@0.25.0/dist/axios.min.js
  • https://www.jsdelivr.com/
    • https://www.jsdelivr.com/?query=axios
    • https://cdn.jsdelivr.net/npm/axios@0.25.0/dist/axios.min.js

url、script.src

function loadJS( url, callback ){
    var script = document.createElement('script')
    var fn = callback || function(){};
    script.type = 'text/javascript';

    //IE
    if(script.readyState){
        script.onreadystatechange = function(){
            if( script.readyState == 'loaded' || script.readyState == 'complete' ){
                script.onreadystatechange = null;
                fn();
            }
        };
    }else{
        //其他浏览器
        script.onload = function(){
            fn();
        };
    }
    script.src = url;
    document.getElementsByTagName('head')[0].appendChild(script);
}

// 测试代码
console.log(typeof axios)
loadJS('https://cdn.bootcdn.net/ajax/libs/axios/0.24.0/axios.js', ()=>console.log(typeof axios))

XHR加载、script.text

function loadJS( url, callback ){
    var fn = callback || function(){};
	var xhr = new XMLHttpRequest;
	xhr.open('get',url,true);
	xhr.onreadystatechange = function(){
	    if( xhr.readyState == 4 ){
	        if( xhr.status >=200 && xhr.status < 300 || xhr.status == 304 ){
	            var script = document.createElement('script');
	            script.type = 'text/javascript';
	            script.text = xhr.responseText;
			    //IE
			    if(script.readyState){
			        script.onreadystatechange = function(){
			            if( script.readyState == 'loaded' || script.readyState == 'complete' ){
			                script.onreadystatechange = null;
			                fn();
			            }
			        };
			    }else{
			        //其他浏览器
			        // axios的onload不会触发???
			        script.onload = function(){
			            fn();
			        };
			        script.onerror = function(e){
			            console.log('script.onerror', e)
			        };
			    }
	            document.body.appendChild(script);
	        }
	    }
	};
	xhr.send(null);
}

// 测试代码
console.log(typeof axios)
loadJS('https://cdn.bootcdn.net/ajax/libs/axios/0.24.0/axios.js', ()=>console.log(typeof axios))

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜猫逐梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值