判断js和css是否加载完成

  • :fa-bell:发现在OSC上面用MD写代码比较爽 忍不住试啦一下
  • 判断CSS是否加载完成
    1. 在head标签内插入 引入css的link标签
    2. 如果是ie浏览器直接使用onload事件 其它浏览器用setTimeout循环轮询判断下面属性
    3. 如果是webkit内核判断 link节点上的sheet属性
    4. 其它浏览器判断节点上的sheet.cssRules属性:fa-linkedin-square:

以下是完整代码

 function loadCss(src,fn){
	    	var node=document.createElement('link');
	    	node.rel='stylesheet';
	    	node.href=src;
	    	document.head.insertBefore(node,document.head.firstChild);
	    	if(node.attachEvent){
	    		node.attachEvent('onload', function(){fn(null,node)});
	    	}else{
			   setTimeout(function() {
		         poll(node, fn);
		       }, 0); // for cache
	    	}
	    	function poll(node,callback){
			    var isLoaded = false;
			    if(/webkit/i.test(navigator.userAgent)) {//webkit
		        	if (node['sheet']) {
		        		isLoaded = true;
		      		}
			    }else if(node['sheet']){// for Firefox
			    	try{
			        	if (node['sheet'].cssRules) {
			          		isLoaded = true;
			        	}
			      	}catch(ex){
			        	// NS_ERROR_DOM_SECURITY_ERR
				        if (ex.code === 1000) {
				         	isLoaded = true;
				        }
				    }
			    }
			    if(isLoaded){
			    	setTimeout(function(){
			    		callback(null,node);
			    	},1);
			    }else{
			    	setTimeout(function(){
			    		poll(node,callback);
			    	},10);
			    }
	    	}
	    	node.onLoad=function(){
	    		fn(null,node);
	    	}
	    }
  • 判断javascript是否加载完成
    1. 如果支持onload事件使用onload事件 否则使用onreadystatechange事件
    2. onreadystatechange事件回调很不稳定 有时候出现一次 有时候两次
 function loadScript(src,fn){
	    	var node = document.createElement("script");
	    	node.setAttribute('async','async');
			var timeID
			var supportLoad = "onload" in node
			var onEvent = supportLoad ? "onload" : "onreadystatechange"
			node[onEvent] = function onLoad() {
			    if (!supportLoad && !timeID && /complete|loaded/.test(node.readyState)) {
			        timeID = setTimeout(onLoad)
			        return
			    }
			    if (supportLoad || timeID) {
			        clearTimeout(timeID)
			        fn(null,node);
			    }
			}
			document.head.insertBefore(node, document.head.firstChild);
			node.src=src;
			node.onerror=function(e){
				fn(e);
			}
	    }

##点击这里===以上代码结合制作的动态引入js,css文件js库

转载于:https://my.oschina.net/diqye/blog/479559

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值