激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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文件引用方式及其同步執行與異步執行的全部內容了,希望對大家有所幫助,多多支持服務器之家~

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一本色道久久99精品综合蜜臀 | 国产拍拍拍三级费视频在线观看 | 2019中文字幕在线播放 | 永久免费毛片 | 黄色网址电影 | 黄色网址在线免费播放 | 国产精品免费一区二区三区都可以 | 98色视频| 免费黄色小视频网站 | 色玖玖综合 | 视频一区免费观看 | 一级电影在线免费观看 | 一级做人爱c黑人影片 | 亚洲自拍第一 | 午夜天堂在线 | 久久欧美亚洲另类专区91大神 | 黄色aaa视频 | 欧美日韩电影在线 | 成人免费福利视频 | 精品在线一区二区三区 | 日韩毛片一区二区三区 | 国产孕妇孕交大片孕 | 国产亚洲精品综合一区 | 国产日韩在线 | 国产a级片电影 | 日韩黄网站 | 久久精品亚洲精品国产欧美kt∨ | 成av人在线观看 | 国产免费黄网 | 麻豆传传媒久久久爱 | 91 在线免费观看 | 91美女福利视频 | 日本网站在线看 | 国产精品一区二区日韩 | 中文字幕视频在线播放 | av成人在线电影 | 久久综合久久综合久久 | 亚洲精品一区二区三区在线看 | 国产精品久久久久国产精品三级 | 久久久大片 | 久草成人在线 |