AJAX载入外部JS文件到页面并让其执行的方法(附源码)

简介: AJAX载入外部JS文件到页面并让其执行的方法(附源码)

一、 向HTML页面中动态添加JS文件(从外部载入)并让其执行的两种方法

 

1、只适用于IE浏览器的简单方法:

  先在文档中放置一张JS“空床”并添加ID:<script id="abc" type="text/javascript"src=""></script>

  然后在需要加载外部JS时对其src属性赋值:document.getElementById("abc").src="外部JS文件的URL地址"

 

2、兼容所有浏览器的规范写法:

 

 

       var script = document.createElement("script")

       script.type = "text/javascript"

       script.src = "外部JS文件的URL地址"

       //测试发现,在IE浏览器下没有script的onload事件,可能是因为加载外部JS文件时的同步特性与非IE浏览器不同所致

       //script.onload = function(){alert("Script is ready!")}

       document.body.appendChild(script)

 

3、AJAX载入外部JS文件到页面并让其执行的实例(加载swfobject.js文件并让其执行):

 

<html>
<head>
<title>《FLASH制作在线音效素材库》-全部实时试听-即点即下载-成氏软件工作室2011年新年献礼</title>
<base href="http://dreamdesign.csrjgzs.com/Article/" />
<base target="_blank" />
</head>
<body bgcolor="#999999">
<script id='jsobj' language='javascript' type='text/javascript' src=''></script>
<div>
<!-- saved from url=(0013)about:internet -->
<!--<p>截入需要一定的时间,请耐心等待5秒钟左右</p> -->
</div>
<DIV align="center">
<TABLE width=100% height=100% border=0 cellSpacing=0 cellPadding=0 style=margin-left:0px;margin-top:-15px;><TR><TD align=center valign=middle>
<TABLE border=1 cellSpacing=0 cellPadding=0><TR><TD>
<DIV align="center" id="flashcontent1"></DIV>
<script type="text/javascript">
    function embedflash(){
        var myswf1 = new SWFObject("http://dreamdesign.105.idcxin.com/res/soundeffectlib/soundeffectlib_online_release.swf","swf1","720","540","8","#cccccc","high");
        //myswf1.addParam("wmode", "transparent");
        myswf1.addParam("wmode", "window");
        myswf1.addParam("menu", "false");
        myswf1.addParam("swLiveConnect", "true");
        myswf1.addParam("AllowNetworking", "all");
        myswf1.addParam("allowfullscreen", "true");
        myswf1.addParam("allowScriptAccess", "always");
        myswf1.write("flashcontent1"); 
    }
    if(window.attachEvent&&window.ActiveXObject){
        document.getElementById("jsobj").src="http://dreamdesign.csrjgzs.com/Article/swfobject.js"
        window.οnlοad=function(){embedflash()}
    }else{
        var script = document.createElement("script"); 
        script.type = "text/javascript"; 
        script.src = "http://dreamdesign.csrjgzs.com/Article/swfobject.js"; 
        script.onload = function(){ 
            //alert("Script is ready!"); 
            embedflash()
        }; 
        document.body.appendChild(script);
    }
</script>
</TD></TR></TABLE>
</TD></TR></TABLE>
</DIV>
</body>
</html>


二、关于AJAX动态截入的JS文件“不执行”(执行不正常)的问题

 

昨天一位开发中国电信网上营业厅(浙江)的好友提到了这个问题:

  他要加载进来并执行的外部JS文件及其内容是后台动态产生的,扩展名为.res,生成之后还有重定向。问题的现象是:直接在HTML页面中嵌入这个动态JS的地址,可以正常执行,用AJAX动态载入则“无法执行”。

  其实,可以非常肯定的说,用上面的AJAX方法动态载入页面的外部JS文件是一定会执行的!之所以看似“不执行”是因为载入的这个JS文件有错误。如果并没有报错,则很可能是这个JS在不恰当的时间使用了不不恰当的语句。

这就是要用AJAX方法动态加载进来并执行的外部JS文件(后台动态生成并有重定向)的URL地址:

http://img.ct10000.com/zj/sy_dtgg_zs_ad.res

点开这个地址,发现跳转到了如下页面:

http://img.ct10000.com/html/zj/sy_dtgg_zs_ad.html

查看其页面源代码为:

 

new Image().src="http://view.img.ct10000.com/vc/viewcollect?cs=MTg1ODN8NTM5NXxzeV9kdGdnX3pzX2FkfHpq&rnd="+Math.random();
document.writeln('<a href="http://click.img.ct10000.com/cc/clickcollect?cs=aHR0cDovL3pqLjE4OS5jbi96aHVhbnRpL2lwaG9uZTUvfDE4NTgzfDUzOTV8c3lfZHRnZ196c19hZHx6ag==" target="_blank"><img alt="电信版iphone5" src="//img.ct10000.com/images/9/201212261803502887.jpg" style="border-bottom: 0px solid; border-left: 0px solid; width: 1000px; height: 400px; border-top: 0px solid; border-right: 0px solid" /></a>');


仔细分析不难发现,其中使用了JS的“document.writeln”方法向文档中输出内容,但根据我的经验,JS的“document.write”和“document.writeln”方法一般适用于页面正在加载,尚未加载完毕的时候(window.onload事件发生之前)向文档中即时写入内容,如果页面已经加载完毕,再使用这两个方法,则可能会生成并跳转到一个新的页面(或者无法执行)。当window.onload事件发生之后再修改页面文档内容或者添加新的内容,就要用document.getElementById("容器ID").innerHTML="新内容",或者document.appendChild(新创建的文档节点元素对象)

 

  因此,只需修改这个动态生成的JS文件的内容,加入兼容性控制流程代码,即可轻松的解决这个“不执行”的问题:

new Image().src="http://view.img.ct10000.com/vc/viewcollect?cs=MTg1ODN8NTM5NXxzeV9kdGdnX3pzX2FkfHpq&rnd="+Math.random();
var hrefstr="http://click.img.ct10000.com/cc/clickcollect?cs=aHR0cDovL3pqLjE4OS5jbi96aHVhbnRpL2lwaG9uZTUvfDE4NTgzfDUzOTV8c3lfZHRnZ196c19hZHx6ag==";
var imgstr="<img alt='电信版iphone5' src='img.jpg' style='border-bottom: 0px solid; border-left: 0px solid; width: 1000px; height: 400px; border-top: 0px solid; border-right: 0px solid' />";
try{
    //试探父文档页面中是否预置有内容输出容器
    if(box){
        var lnk = document.createElement("a"); 
        lnk.target="_blank";
        lnk.href=hrefstr;
        lnk.innerHTML=imgstr;
        box.appendChild(lnk);
    }
}catch(e){
    document.writeln("<a href='"+hrefstr+"' target='_blank'>"+imgstr+"</a>");
}


《直接嵌入JS文件》演示页面及其源代码:

directembedjs.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>直接嵌入JS文件</title>
</head>
<body>
<script type="text/javascript"src="js.js"></script>
</body>
</html>


《AJAX动态载入JS文件并让它执行》演示页面及其源代码:

ajaxloadjs_execute.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>AJAX动态载入JS文件并让它执行</title>

<style>

div { height:100px; margin:10px auto; }

</style>

</head>


<body style="text-align:center">

   

   <div id="headdiv" style="background:#ffcccc"></div>    

   <div id="contentdiv" style="height:auto; background:#ccffcc"></div>    

   <div id="footdiv" style="background:#ccccff"></div>

   

   <script language="javascript">

       //预先设置一个盒子容器,让动态加载进来的JS文件将HTML内容写入其中

       var box=document.getElementById("contentdiv")

       var script = document.createElement("script")

       script.type = "text/javascript"

       script.src = "js.js"

       //script.src = "http://img.ct10000.com/zj/sy_dtgg_zs_ad.res"

       //测试发现,在IE浏览器下没有script的onload事件,可能是因为加载外部JS文件时的同步特性与非IE浏览器不同所致

       //script.onload = function(){alert("Script is ready!")}

       document.body.appendChild(script)

   </script>


</body>

</html>

 

 

 

 

 

 

 

 

目录
相关文章
|
6月前
|
编解码 前端开发 JavaScript
js react antd 实现页面低分变率和高分变率下字体大小自适用,主要是配置antd
在React中结合Ant Design与媒体查询,通过less变量和响应式断点动态调整`@font-size-base`,实现多分辨率下字体自适应,提升跨设备体验。
308 2
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
501 1
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
742 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
581 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
560 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
422 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
html+js+css实现的建筑方块立体数字时钟源码
html+js+css实现的建筑方块立体数字时钟源码
588 33
一个好看的小时钟html+js+css源码
一个好看的小时钟html+js+css源码
262 24
|
JavaScript 前端开发 API
纯js轻量级页面顶部Loading进度条插件
纯js轻量级页面顶部Loading进度条插件