加载js后,不能再异步加载js

时间:2022-08-27 15:24:14
使用函数加载js后,在js里输出document.write('XXXX.js'),加载其他js,不加载问题,代码如下:

代码1:

<html>
<head>
<title></title>
</head>
<body>

</body>

<script src="http://api.map.baidu.com/api?key=&v=1.1&services=true"></script>
</html>

上面的代码1,加载引用的地址后,会输出一个js和一个css会继续加载

代码2:

<html>
<head>
<title></title>
</head>
<body>

</body>

<script type="text/javascript">
    var script = document.createElement('script');
    script.src = 'http://api.map.baidu.com/api?key=&v=1.1&services=true';
    script.type = 'text/javascript';
    document.head.appendChild(script);
</script>
</html>

上面的代码2,加载引用的地址后,虽然输出了两个doucment.write('xxx'),但是不会异步加载,

求解答

13 个解决方案

#1


求解答,在线等

#2


不会异步加载是什么意思?

#3


就是引用的http://api.map.baidu.com/api?key=&v=1.1&services=true这个地址,加载后,这个脚本会输出两个document.write,就不会再加载了。
可以是下我贴的两段代码,然后看下载的资源就很清楚了

#4


当js加载后文档已经输出完毕,这时候再document.write,就是破坏性输出了,已经存在的dom都将被销毁,也就是说当前的js文件也将失效。不用document.write就行了

#5


引用 4 楼 wzs_xyz 的回复:
当js加载后文档已经输出完毕,这时候再document.write,就是破坏性输出了,已经存在的dom都将被销毁,也就是说当前的js文件也将失效。不用document.write就行了


但是我引用的这个是百度的api,必须要这么用呀,又不能让百度改的,有什么解决办法?求指教

#6


<script type="text/javascript">
    document.write('<script type="text/javascript" src="script/loadScript.js"><\/script>');
</script>

#7


。。。把里面src改一下。上面是我的测试用的

#8


话说回来,你的代码一不是可以么?

干嘛要换成第二种方式呢。

#9


直接引用那个css文件和js文件试试,我测试是加载了,能不能用不知道。


function loadjscssfile(filename,filetype){

    if(filetype == "js"){
        var fileref = document.createElement('script');
        fileref.setAttribute("type","text/javascript");
        fileref.setAttribute("src",filename);
    }else if(filetype == "css"){
    
        var fileref = document.createElement('link');
        fileref.setAttribute("rel","stylesheet");
        fileref.setAttribute("type","text/css");
        fileref.setAttribute("href",filename);
    }
   if(typeof fileref != "undefined"){
        document.getElementsByTagName("head")[0].appendChild(fileref);
    }
    
}
loadjscssfile("http://api.map.baidu.com/res/11/bmap.css","css");
loadjscssfile("http://api.map.baidu.com/getscript?v=1.1&ak=&services=true&t=20121127154638","js");

#10


引用 8 楼 functionsub 的回复:
话说回来,你的代码一不是可以么?

干嘛要换成第二种方式呢。


因为网站是外框不变,我异步加载里面的内容的,第一种方式的话必须引用那个脚本了,第一次页面加载会比较慢,所以采用第二种方式。

直接引用百度输出的两个write这个我试过,但是有没更好的只引用原来的一个js 的方式?

#11


引用 9 楼 ftiger 的回复:
直接引用那个css文件和js文件试试,我测试是加载了,能不能用不知道。


function loadjscssfile(filename,filetype){

    if(filetype == "js"){
        var fileref = document.createElement('script');
        fileref.setAttribute("type","text/javascript");
        fileref.setAttribute("src",filename);
    }else if(filetype == "css"){
    
        var fileref = document.createElement('link');
        fileref.setAttribute("rel","stylesheet");
        fileref.setAttribute("type","text/css");
        fileref.setAttribute("href",filename);
    }
   if(typeof fileref != "undefined"){
        document.getElementsByTagName("head")[0].appendChild(fileref);
    }
    
}
loadjscssfile("http://api.map.baidu.com/res/11/bmap.css","css");
loadjscssfile("http://api.map.baidu.com/getscript?v=1.1&ak=&services=true&t=20121127154638","js");



有没有只引用一个的方式呢?求最佳

#12


引用 11 楼 zhengcongcong2009 的回复:
Quote: 引用 9 楼 ftiger 的回复:

直接引用那个css文件和js文件试试,我测试是加载了,能不能用不知道。


function loadjscssfile(filename,filetype){

    if(filetype == "js"){
        var fileref = document.createElement('script');
        fileref.setAttribute("type","text/javascript");
        fileref.setAttribute("src",filename);
    }else if(filetype == "css"){
    
        var fileref = document.createElement('link');
        fileref.setAttribute("rel","stylesheet");
        fileref.setAttribute("type","text/css");
        fileref.setAttribute("href",filename);
    }
   if(typeof fileref != "undefined"){
        document.getElementsByTagName("head")[0].appendChild(fileref);
    }
    
}
loadjscssfile("http://api.map.baidu.com/res/11/bmap.css","css");
loadjscssfile("http://api.map.baidu.com/getscript?v=1.1&ak=&services=true&t=20121127154638","js");



有没有只引用一个的方式呢?求最佳


这个分开引用,试过了,不执行

#13


楼主解决了吗,我遇到同样的问题,求解答

#1


求解答,在线等

#2


不会异步加载是什么意思?

#3


就是引用的http://api.map.baidu.com/api?key=&v=1.1&services=true这个地址,加载后,这个脚本会输出两个document.write,就不会再加载了。
可以是下我贴的两段代码,然后看下载的资源就很清楚了

#4


当js加载后文档已经输出完毕,这时候再document.write,就是破坏性输出了,已经存在的dom都将被销毁,也就是说当前的js文件也将失效。不用document.write就行了

#5


引用 4 楼 wzs_xyz 的回复:
当js加载后文档已经输出完毕,这时候再document.write,就是破坏性输出了,已经存在的dom都将被销毁,也就是说当前的js文件也将失效。不用document.write就行了


但是我引用的这个是百度的api,必须要这么用呀,又不能让百度改的,有什么解决办法?求指教

#6


<script type="text/javascript">
    document.write('<script type="text/javascript" src="script/loadScript.js"><\/script>');
</script>

#7


。。。把里面src改一下。上面是我的测试用的

#8


话说回来,你的代码一不是可以么?

干嘛要换成第二种方式呢。

#9


直接引用那个css文件和js文件试试,我测试是加载了,能不能用不知道。


function loadjscssfile(filename,filetype){

    if(filetype == "js"){
        var fileref = document.createElement('script');
        fileref.setAttribute("type","text/javascript");
        fileref.setAttribute("src",filename);
    }else if(filetype == "css"){
    
        var fileref = document.createElement('link');
        fileref.setAttribute("rel","stylesheet");
        fileref.setAttribute("type","text/css");
        fileref.setAttribute("href",filename);
    }
   if(typeof fileref != "undefined"){
        document.getElementsByTagName("head")[0].appendChild(fileref);
    }
    
}
loadjscssfile("http://api.map.baidu.com/res/11/bmap.css","css");
loadjscssfile("http://api.map.baidu.com/getscript?v=1.1&ak=&services=true&t=20121127154638","js");

#10


引用 8 楼 functionsub 的回复:
话说回来,你的代码一不是可以么?

干嘛要换成第二种方式呢。


因为网站是外框不变,我异步加载里面的内容的,第一种方式的话必须引用那个脚本了,第一次页面加载会比较慢,所以采用第二种方式。

直接引用百度输出的两个write这个我试过,但是有没更好的只引用原来的一个js 的方式?

#11


引用 9 楼 ftiger 的回复:
直接引用那个css文件和js文件试试,我测试是加载了,能不能用不知道。


function loadjscssfile(filename,filetype){

    if(filetype == "js"){
        var fileref = document.createElement('script');
        fileref.setAttribute("type","text/javascript");
        fileref.setAttribute("src",filename);
    }else if(filetype == "css"){
    
        var fileref = document.createElement('link');
        fileref.setAttribute("rel","stylesheet");
        fileref.setAttribute("type","text/css");
        fileref.setAttribute("href",filename);
    }
   if(typeof fileref != "undefined"){
        document.getElementsByTagName("head")[0].appendChild(fileref);
    }
    
}
loadjscssfile("http://api.map.baidu.com/res/11/bmap.css","css");
loadjscssfile("http://api.map.baidu.com/getscript?v=1.1&ak=&services=true&t=20121127154638","js");



有没有只引用一个的方式呢?求最佳

#12


引用 11 楼 zhengcongcong2009 的回复:
Quote: 引用 9 楼 ftiger 的回复:

直接引用那个css文件和js文件试试,我测试是加载了,能不能用不知道。


function loadjscssfile(filename,filetype){

    if(filetype == "js"){
        var fileref = document.createElement('script');
        fileref.setAttribute("type","text/javascript");
        fileref.setAttribute("src",filename);
    }else if(filetype == "css"){
    
        var fileref = document.createElement('link');
        fileref.setAttribute("rel","stylesheet");
        fileref.setAttribute("type","text/css");
        fileref.setAttribute("href",filename);
    }
   if(typeof fileref != "undefined"){
        document.getElementsByTagName("head")[0].appendChild(fileref);
    }
    
}
loadjscssfile("http://api.map.baidu.com/res/11/bmap.css","css");
loadjscssfile("http://api.map.baidu.com/getscript?v=1.1&ak=&services=true&t=20121127154638","js");



有没有只引用一个的方式呢?求最佳


这个分开引用,试过了,不执行

#13


楼主解决了吗,我遇到同样的问题,求解答