博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断js和css是否加载完成
阅读量:6257 次
发布时间:2019-06-22

本文共 2119 字,大约阅读时间需要 7 分钟。

  hot3.png

  • :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);			}	    }

##

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

你可能感兴趣的文章
Nearest Common Ancestors(LCA)
查看>>
JS/atan2 pow
查看>>
Pythoh网络编程3:创建TCP服务器和客户端
查看>>
angularjs 出现 “Possibly unhandled rejection: cancel ”错误
查看>>
bzoj 2653 middle (主席树+二分)
查看>>
指导别人,弥补自己
查看>>
BZOJ3932: [CQOI2015]任务查询系统
查看>>
和make相关的一些命令
查看>>
Fiddler抓取https设置及其原理
查看>>
常用的一些模板
查看>>
WPF使用Expression Design设计图形
查看>>
Ubuntu 下Qt安装实用教程
查看>>
DNS 协议2
查看>>
Ubuntu 隐藏所有窗口快捷键不生效问题
查看>>
编译Spring源码
查看>>
javascript运算符优先级
查看>>
Spring Cloud 学习 (七) Spring Cloud Sleuth
查看>>
使用docker api
查看>>
Log4j简单配置解析
查看>>
游戏上线... 记录下...
查看>>