一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 淺談js文件引用方式及其同步執行與異步執行

淺談js文件引用方式及其同步執行與異步執行

2020-06-20 12:36java教程網 JAVA教程

下面小編就為大家帶來一篇淺談js文件引用方式及其同步執行與異步執行。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

任何以appendChild(scriptNode) 的方式引入的js文件都是異步執行的 (scriptNode 需要插入document中,只創建節點和設置 src 是不會加載 js 文件的,這跟 img 的與加載不同 )

html文件中的<script>標簽中的代碼或src引用的js文件中的代碼是同步加載和執行的

html文件中的<script>標簽中的代碼使用document.write()方式引入的js文件是異步執行的

html文件中的<script>標簽src屬性所引用的js文件的代碼內再使用document.write()方式引入的js文件是同步執行的

1、

?
1
2
3
<script>
//同步加載執行的代碼
</script>

2、

?
1
<script src="xx.js"></script> //同步加載執行xx.js中的代碼

3、

?
1
2
3
<script>
document.write('<script src="xx.js"><\/script>');  //異步加載執行xx.js中的代碼
</script>

4、

?
1
<script src="xx.js"></script>

xx.js中有下面代碼:

?
1
2
document.write('<script src="11.js"><\/script>'); 
document.write('<script src="22.js"><\/script>'); 

則xx.js和11.js、22.js 都是同步加載和執行的。

如果 xx.js 以插入方式異步加載,則 11.js 和 22.js 仍然是同步加載的(異步中的同步,即,這2個文件的加載是分先后次序的)

測試:在11中 alert, 22中 document.write() ,可以看到 22中寫入語句被阻塞

5、

下面這種方式,xx.js會在appendChild執行之后異步加載執行

?
1
2
3
var script = document.createElement("script");
script.setAttribute("src","xx.js");
documenrt.getElementsByTagName("head")[0].appendChild(script);

一個加載 js 文件的 函數:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var loadJS = function(url,callback){
var head = document.getElementsByTagName('head')[0], 
script = document.createElement('script'); 
script.src = url; 
script.type = "text/javascript"
head.appendChild( script);
  script.onload = script.onreadystatechange = function(){
//script 標簽,IE 下有 onreadystatechange 事件, w3c 標準有 onload 事件  
//這些 readyState 是針對IE8及以下的,W3C 標準因為script 標簽沒有這個 onreadystatechange 所以也不會有 this.readyState ,
// 好在文件加載不成功 onload 不會執行,(!this.readyState) 是針對 W3C標準的
if ((!this.readyState) || this.readyState == "complete" || this.readyState == "loaded" ){
 callback();  
 }
 else
 {    
 alert("can not load the js file")  
 
 }
 }

對于第4點的測試(其中插入 alert 很容易看到加載時阻塞的)

tryjs.html

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
<script src="tryjs.js"
onload="if(!document.all){console.log('outer js callback, not IE');}"
onreadystatechange="console.log('outer js callback ',this.readyState,' IE');"></script>
 
 
<body>
 
</body>
</html>

tryjs.js

?
1
2
3
4
console.log('write begin');
document.write('<script src="try.1.js" onreadystatechange="console.log(\'file 1 callback \',this.readyState,\' IE\');" onload="if(!document.all){console.log(\'file 1 callback,NOT IE \');}"><\/script>');
document.write('<script src="try.2.js" onreadystatechange="console.log(\'file 2 callback \',this.readyState,\' IE\');" onload="if(!document.all){console.log(\'file 2 callback,NOT IE \');}"><\/script>');
console.log('write finished');

try.1.js

?
1
2
console.log('loadjs 1 begin');
console.log('loadjs 1 finished');

try.2.js

?
1
2
console.log('loadjs 2 begin');
console.log('loadjs 2 finished');

測試結果(file 2 和 file 1 的 callback complete 在IE7\8\9次序不確定)

IE 7:

日志: outer js callback loading IE
日志: outer js callback loaded IE
日志: write begin
日志: write finished
日志: outer js callback complete IE
日志: file 1 callback loading IE
日志: file 2 callback loading IE
日志: loadjs 1 begin
日志: loadjs 1 finished
日志: loadjs 2 begin
日志: loadjs 2 finished
日志: file 2 callback complete IE
日志: file 1 callback complete IE

IE8:

日志: outer js callback loading IE
日志: outer js callback loaded IE
日志: write begin
日志: write finished
日志: outer js callback complete IE
日志: file 1 callback loading IE
日志: file 2 callback loading IE
日志: loadjs 1 begin
日志: loadjs 1 finished
日志: loadjs 2 begin
日志: loadjs 2 finished
日志: file 2 callback complete IE
日志: file 1 callback complete IE

IE9:

日志: write begin
日志: write finished
日志: outer js callback complete IE
日志: file 1 callback loading IE
日志: file 2 callback loading IE
日志: loadjs 1 begin
日志: loadjs 1 finished
日志: loadjs 2 begin
日志: loadjs 2 finished
日志: file 1 callback complete IE
日志: file 2 callback complete IE

FIREFOX:

write begin
write finished
outer js callback, not IE
loadjs 1 begin
loadjs 1 finished
file 1 callback,NOT IE
loadjs 2 begin
loadjs 2 finished
file 2 callback,NOT IE

CHROME:

write begin
write finished
outer js callback, not IE
loadjs 1 begin
loadjs 1 finished
file 1 callback,NOT IE
loadjs 2 begin
loadjs 2 finished
file 2 callback,NOT IE

以上就是小編為大家帶來的淺談js文件引用方式及其同步執行與異步執行的全部內容了,希望對大家有所幫助,多多支持服務器之家~

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 小黄鸭YELLOWDUCK7596 | www.国产一区二区三区 | 国产精品自在线拍 | 亚洲AV无码一区二区三区乱子伦 | 国产伦精品一区二区三区免费观看 | 91精品国产高清久久久久久io | 亚洲妇熟xxxxx妇色黄 | 风间由美理论片在线观看 | 香蕉久草在线 | 国产成人高清精品免费观看 | 国产全部理论片线观看 | 久久成人免费大片 | 精品国产一区二区三区国产馆 | 欧美日本一本线在线观看 | 色综合色狠狠天天综合色hd | 东北恋哥在线播放免费播放 | 国产三级自拍 | 娇妻与公陈峰姚瑶小说在线阅读 | 国产综合亚洲专区在线 | 成人免费淫片95视频观看网站 | 亚洲图片一区二区 | 国产成人免费高清激情视频 | 国产天天在线 | a男人的天堂久久a毛片 | 成人毛片高清视频观看 | 视频在线观看高清免费看 | 亚洲精品午夜久久aaa级久久久 | 欧乱色国产精品兔费视频 | 色综合91久久精品中文字幕 | 我半夜摸妺妺的奶C了她软件 | 国内精品露脸在线视频播放 | 天天操天天干天天做 | 三级aa久久 | 暖暖视频免费观看视频中国.韩剧 | 久草草在线视视频 | 免费一级毛片在级播放 | 男人躁女人p | 色老板在线视频观看 | 午夜DV内射一区区 | 国产区成人综合色在线 | 精品无人区麻豆乱码无限制 |