原生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 相关文章推荐
JavaScript面向对象之Prototypes和继承
Jul 12 Javascript
网页实时显示服务器时间和javscript自运行时钟
Jun 09 Javascript
AngularJS ng-bind 指令简单实现
Jul 30 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
Oct 26 Javascript
详解Javascript获取缓存和清除缓存API
May 25 Javascript
js定时器实现倒计时效果
Nov 05 Javascript
Webpack 之 babel-loader文件预处理器详解
Mar 23 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
Apr 20 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
Apr 24 Javascript
vue非父子组件通信问题及解决方法
Jun 11 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
Oct 30 Javascript
更强大的vue ssr实现预取数据的方式
Jul 19 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
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
python实现简单的TCP代理服务器
2014/10/08 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
印度第一网上礼品店:IGP.com
2020/02/06 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
《鸟岛》教学反思
2014/04/26 职场文书
单位未婚证明范本
2014/11/25 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
党校学习个人总结
2015/02/15 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
python中subplot大小的设置步骤
2021/06/28 Python
javascript数组includes、reduce的基本使用
2021/07/02 Javascript