原生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 Undefined,Null类型和NaN值区别
Oct 22 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
Sep 29 Javascript
不要在cookie中使用特殊字符的原因分析
Jul 13 Javascript
基于jquery的用鼠标画出可移动的div
Sep 06 Javascript
jquery div 居中技巧应用介绍
Nov 24 Javascript
JavaScript获取按钮所在form表单id的方法
Apr 02 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
Aug 25 Javascript
AngularJS通过$location获取及改变当前页面的URL
Sep 23 Javascript
微信小程序实现图片轮播及文件上传
Apr 07 Javascript
浅析vue插槽和作用域插槽的理解
Apr 22 Javascript
了不起的11个JavaScript代码重构最佳实践小结
Jan 11 Javascript
vue.js实现点击图标放大离开时缩小的代码
Jan 27 Vue.js
微信小程序内拖动图片实现移动、放大、旋转的方法
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中for循环语句的几种变型
2006/11/26 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
2015/12/12 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Python中字符串的常见操作技巧总结
2016/07/28 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
自我鉴定范文300字
2013/10/01 职场文书
留学推荐信写作指南
2014/01/25 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
认真学习保证书
2015/02/26 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
迎国庆主题班会
2015/08/17 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android