5
回答
document.write这种方式加载的js是同步的还是异步加载的?
华为云数据库免费试用   
function write(js){ 
    document.write('<script type="text/javascript" src="'+js+'" > <\/script>'); 
} 
举报
yak
发帖于7年前 5回/8K+阅
共有5个答案 最后回答: 4年前

一个远程的js文件

为什么我用createElement("script")的方式加载,调用函数就会报错,用document.write就不报错?

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ru">
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
    
    </head>
    
    <script type="text/javascript">
    function load(js){
    var s = document.createElement('script');  
    s.setAttribute('type','text/javascript');  
    s.setAttribute('src',js);  
    var head = document.getElementsByTagName('head');  
    head[0].appendChild(s);  
    
    }
    function write(js){
    document.write('<script type="text/javascript" src="'+js+'" > <\/script>');
    
    }
    
       
           load("http://www.oschina.net/js/2011/jquery-1.5.1.min.js"); 
          // write("http://www.oschina.net/js/2011/jquery-1.5.1.min.js");
        
   </script>

<script>
alert($);

</script>

 

引用来自“yak”的答案

一个远程的js文件

为什么我用createElement("script")的方式加载,调用函数就会报错,用document.write就不报错?

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ru">
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
    
    </head>
    
    <script type="text/javascript">
    function load(js){
    var s = document.createElement('script');  
    s.setAttribute('type','text/javascript');  
    s.setAttribute('src',js);  
    var head = document.getElementsByTagName('head');  
    head[0].appendChild(s);  
    
    }
    function write(js){
    document.write('<script type="text/javascript" src="'+js+'" > <\/script>');
    
    }
    
       
           load("http://www.oschina.net/js/2011/jquery-1.5.1.min.js"); 
          // write("http://www.oschina.net/js/2011/jquery-1.5.1.min.js");
        
   </script>

<script>
alert($);

</script>

 

对于动态创建的js 引用而言 ,针对不同的浏览器有不同的反应  

楼主的这种写法 对 FF Opera 而言 load 方法是阻塞的 故alert($)能输出,而对IE Chrome Safria 而言 是非阻塞的 所以就会报错 

而document.write的方式,对所有浏览器而言都是阻塞的 即同步的 所以alert($)会输出正确结果

这个好像有点复杂,最近刚在做个项目碰到了,分不同浏览器。

同时document.write a.js 和 b.js,先后顺序是a、b。

如果b依赖于a,在chrome、ff和IE高版本里没有问题,但是IE低版本(包括IE7)就会报错。

在IE低版本里,好像非顺序阻塞执行的。

顶部