javascript实现js脚本的的异步加载

javascript实现js脚本的的异步加载,和图片的异步加载稍有不一样,script的异步加载须要借助dom,所以有了局限性javascript

<html>
	<head>
		<meta charset="utf-8" />
		<title>Javascript</title>
		<meta http-equiv="X-UA-Compatible" content="IE=7">
	</head>
	<body>
		
		<script type="text/javascript" charset="utf-8">

			function loadScript(url,callback)
			{
				

				var script = document.createElement('script');
				if(!!document.setAttribute)
				{

					script.setAttribute('type','text/javascript');
					script.setAttribute('charset','utf-8');
					script.setAttribute('language','javascript');
				}else{
					script['type'] ='text/javascript';
					script['charset'] = 'utf-8';
					script['language'] = 'javascript';
					
				}

				if (!!script.readyState)
				{

					script.onreadystatechange = function()
					{ 
					
						if (script.readyState == "loaded" ||script.readyState == "complete")
						{ 
							script.onreadystatechange = null; 
							callback(script); 
						} 
					}; 
				}else{

					script.onload = function()
					{
						script.onload = null;
						callback(script);
					}
				}

				script['src'] = url;

				document.head.appendChild(script);
			}

			loadScript('https://fbstatic-a.akamaihd.net/rsrc.php/v2/yv/r/wgFc3t0g5gk.js',function(script){
				console.log(script);
			});
			
		</script>
	</body>
</html>


~~~~~~~~~~~~~~~~~~~~~~~2014-11-30 更新~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~php

1. defer下载脚本(异步下载,当网页加载完后才能够执行其中的方法,保证执行顺序)html

<script src="1.js" defer></script>

2.async下载脚本(异步下载,下载完成后便可执行,不保证执行顺序)html5

<script src="2.js" async></script>


对于defer与async的选择问题上,建议和浏览器当前加载页面无关的脚本使用 async,不然使用defer或者也能够放在html页面底部。java

(注:页面无关的脚本 为何要加载,白痴么?No,对于浏览器而言,静态文件会被缓存在浏览器中,下次加载会直接从缓存读取,若是缓存没有才会请求网络。有人想知道js脚本下载不完整浏览器会加载么,答案是浏览器会等待js脚本缓存完后加载,不用担忧只加载了一半浏览器


同时使用defer和async,html5浏览器会忽略defer(IE10+支持async)缓存

<script src="2.js" defer async></script>
相关文章
相关标签/搜索