原生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 相关文章推荐
7个Javascript地图脚本整理
Oct 20 Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
Jul 08 Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
Jan 04 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
Nov 13 Javascript
深入浅析JavaScript中的constructor
Apr 19 Javascript
JavaScript动态添加事件之事件委托
Jul 12 Javascript
es7学习教程之Decorators(修饰器)详解
Jul 21 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
Oct 12 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
Nov 22 Javascript
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
解决echarts图表使用v-show控制图表显示不全的问题
Jul 19 Javascript
vue实现移动端拖动排序
Aug 21 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 has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
PHP5函数小全(分享)
2013/06/06 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
php命令行写shell实例详解
2018/07/19 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
获取url中用&amp;隔开的参数实例(分享)
2017/05/28 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
Python json读写方式和字典相互转化
2020/04/18 Python
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
应聘教师推荐信
2013/10/31 职场文书
大课间体育活动方案
2014/03/12 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
高一军训决心书
2015/02/05 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
入党群众意见范文
2015/06/02 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL