动态导入Js文件
Posted 壹飛臺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态导入Js文件相关的知识,希望对你有一定的参考价值。
var ScriptLoader = { worker: 0, isWait: false, readyQueue: [], callback: [], timer: null, wait: function () { if (!this._isComplateTask()) { this.isWait = true; this.readyQueue.unshift(\'wait\'); } //console.log(\'wait is true\'); return this; }, _isComplateTask: function () { return this.worker === 0; }, loadJs: function (url, async, callback) { console.log(\'load js \' + url); if (this.isWait) { // 将js加载到队列 this.readyQueue.unshift(url); this.callback.unshift(callback); if (!this.timer) { // 定时处理队列 var that = this; this.timer = setInterval(function () { if (that.readyQueue.length === 0) { // 队列消费完, 清除定时器 clearInterval(that.timer); that.timer = null; } else if (that._isComplateTask()) { that._loadReady(); } }, 50); } } else { this._realLoad(url, async, callback); } return this; }, /** * 消费队列 */ _loadReady: function () { var url; while (this.readyQueue.length > 0) { url = this.readyQueue.pop(); if (url === \'wait\') { if (!this._isComplateTask()) { this.isWait = true; break; } } else { this._realLoad(url, true, this.callback.pop()); } } }, _realLoad: function (url, async, callback) { this.worker++; var that = this; console.log(\'start load js \' + url); this._loadJsFile(url, function () { that.worker--; if (that.worker === 0) { //console.log(\'wait is false\'); that.isWait = false; } if(callback){ callback(); } }, async); }, _loadJsFile: function (file, callback, async) { var head, d = document; ((head = d.getElementsByTagName(\'head\')[0]) || (head = d.body.parentNode.appendChild(d.createElement("head")))); var script = d.createElement("script"); script.type = "text/javascript"; script.src = file; script.charset = \'UTF-8\'; if (async) { script.async = true; } if (script.readyState) {//IE script.onreadystatechange = function () { if (script.readyState === "loaded" || script.readyState === "complete") { script.onreadystatechange = null; callback(); } }; } else {//其他浏览器 script.onload = function () { callback(); }; } head.appendChild(script); } };
以上是关于动态导入Js文件的主要内容,如果未能解决你的问题,请参考以下文章
ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入和使用.js文件传输加解密