原生JS实现动态加载js文件并在加载成功后执行回调函数的方法


Posted in Javascript onDecember 30, 2020

本文实例讲述了原生JS实现动态加载js文件并在加载成功后执行回调函数的方法。分享给大家供大家参考,具体如下:

有的时候需要动态加载一个javascript文件,并且在加载成功后执行回调函数(例如文件中保存了json数据之类的)。要实现这样的功能,可以使用<script> 元素的load 事件(IE9+、chrome、FireFox等)和onreadystatechange 事件(IE8以下),直接上代码:

function loadScript(src, callback) {
 var script = document.createElement('script'),
  head = document.getElementsByTagName('head')[0];
 script.type = 'text/javascript';
 script.charset = 'UTF-8';
 script.src = src;
 if (script.addEventListener) {
  script.addEventListener('load', function () {
   callback();
  }, false);
 } else if (script.attachEvent) {
  script.attachEvent('onreadystatechange', function () {
   var target = window.event.srcElement;
   if (target.readyState == 'loaded') {
    callback();
   }
  });
 }
 head.appendChild(script);
}

调用方法示例:

loadScript('http://cdn.staticfile.org/jquery/1.6.2/jquery.min.js',function(){
 console.log('onload');
});

运行后控制台输出onload,如下图所示:

原生JS实现动态加载js文件并在加载成功后执行回调函数的方法

补充一个函数

function sk_loadScript(url, callback) {
 var script = document.createElement("script");
 script.type = "text/javascript";
 if(typeof(callback) != "undefined"){
  if (script.readyState) {
   script.onreadystatechange = function () {
    if (script.readyState == "loaded" || script.readyState == "complete") {
     script.onreadystatechange = null;
     callback();
    }
   };
  } else {
   script.onload = function () {
    callback();
   };
  }
 }
 script.src = url;
 document.body.appendChild(script);
}

if(typeof jQuery=='undefined'){
	sk_loadScript("/comments/js/jquery.js",function(){
		sk_main();
	});
}else{
	sk_main();
}

上述代码感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具http://tools.3water.com/code/HtmlJsRun测试运行一下,看看运行结果如何。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js中关于一个分号的崩溃示例
Nov 11 Javascript
jquery用offset()方法获得元素的xy坐标
Sep 06 Javascript
javascript密码强度校验代码(两种方法)
Aug 10 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
学习Javascript闭包(Closure)知识
Aug 07 Javascript
Vue.js学习笔记之 helloworld
Aug 14 Javascript
jQuery简单获取DIV和A标签元素位置的方法
Feb 07 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
Jun 11 Javascript
vue视频播放暂停代码
Nov 08 Javascript
Vue实现图片与文字混输效果
Dec 04 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
Jun 28 Javascript
浅谈JSON5解决了JSON的两大痛点
Dec 14 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
Sep 04 #Javascript
JS中DOM元素的attribute与property属性示例详解
Sep 04 #Javascript
JavaScript使用indexOf()实现数组去重的方法分析
Sep 04 #Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
Sep 04 #Javascript
原生JS实现获取及修改CSS样式的方法
Sep 04 #Javascript
微信小程序canvas拖拽、截图组件功能
Sep 04 #Javascript
mpvue写一个CPASS小程序的示例
Sep 04 #Javascript
You might like
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
php array_filter除去数组中的空字符元素
2020/06/21 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
python常规方法实现数组的全排列
2015/03/17 Python
python比较两个列表是否相等的方法
2015/07/28 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
python利用platform模块获取系统信息
2020/10/09 Python
用Python写一个for循环的例子
2016/07/19 面试题
《开国大典》教学反思
2014/04/19 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
店面出租协议书范本
2014/11/28 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
采购员岗位职责范本
2015/04/07 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
离婚案件原告代理词
2015/05/23 职场文书
同乡会致辞
2015/07/30 职场文书
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis