Heim > Web-Frontend > js-Tutorial > Nachdem das JS-Skript geladen ist, wird die entsprechende Callback-Funktion ausgeführt.

Nachdem das JS-Skript geladen ist, wird die entsprechende Callback-Funktion ausgeführt.

php中世界最好的语言
Freigeben: 2018-03-17 13:19:47
Original
1330 Leute haben es durchsucht

Dieses Mal werde ich Ihnen den Vorgang des Ladens des JS-Skripts und der anschließenden Ausführung der entsprechenden Rückruffunktion vorstellen. Welche Vorsichtsmaßnahmen gibt es zum Laden des JS-Skripts und zur anschließenden Ausführung der entsprechenden Funktion? Rückruffunktion? Das Folgende ist: Werfen wir einen Blick auf praktische Fälle.

In Projekten stoßen wir häufig auf dieses Problem: Wenn ein JS-Skript geladen wird, wird die entsprechende Aufgabe ausgeführt. Viele Freunde wissen jedoch möglicherweise nicht, wie sie beurteilen können, ob die JS-Datei, die wir laden möchten, geladen wird , Nachdem der Ladevorgang abgeschlossen ist, wird es uns nicht gelingen, wenn wir die Funktion in der js-Datei aufrufen. In diesem Artikel wird hauptsächlich erläutert, wie die entsprechende Rückrufaufgabe ausgeführt wird, nachdem die js-Datei erfolgreich geladen wurde.

Grundidee

Wir können das <script>-Element dynamisch erstellen und dann das Skript laden, indem wir sein src-Attribut ändern, aber wie machen wir das? Wissen Sie? Wurde die Skriptdatei geladen? Denn einige Funktionen müssen geladen werden, bevor das Skript aufgerufen werden kann. Sie können das <script> des onreadystatechange-Elements im IE-Browser verwenden, um Änderungen im Ladestatus zu überwachen und festzustellen, ob das Skript geladen ist, indem Sie bestimmen, ob sein readyState geladen oder abgeschlossen ist. Nicht-IE-Browser können mit onload direkt ermitteln, ob das Skript geladen ist.

Ein einfaches Beispiel für ein dynamisches Skript

Ein einfacher Implementierungsprozess ist wie folgt:

// IE下:
var HEAD = document.getElementsByTagName('head')[0] || document.documentElement
var src = 'http://xxxxxx.com'
var script = document.createElement('script')
script.setAttribute('type','text/javascript')
script.onreadystatechange = function() {
 if(this.readyState === 'loaded' || this.readyState === 'complete') {
  console.log('加载成功!')
 }
}
script.setAttribute('src', src)
HEAD.appendChild(script)
// Chrome等现代浏览器:
var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;
var src = 'http://xxxxxx.com'
var script = document.createElement('script')
script.setAttribute('type','text/javascript')
script.onload = function() {
 console.log('加载成功!')
}
script.setAttribute('src', src)
HEAD.appendChild(script)
Nach dem Login kopieren

Das Prinzip ist Sehr einfach, nach diesen zwei einfachen Prinzipien nehmen wir einige Änderungen vor, ich habe sie in zwei Funktionen geändert, nämlich serielles Laden und paralleles Laden.

Serielle und parallele dynamische Skripte

Beim Übergeben eines Arrays mit mehreren JS-Dateipfaden beginnt die serielle Ladefunktion mit dem ersten Das Laden von Jedes Mal, wenn eine Skriptdatei erfolgreich geladen wird, wird die nächste Skriptdatei geladen. Nachdem der gesamte Ladevorgang abgeschlossen ist, wird die Callback-Funktion ausgeführt. Beim parallelen Laden werden alle Skriptdateien von Anfang an geladen, d. h. sie beginnen am selben Punkt zu laden. Wenn der gesamte Ladevorgang abgeschlossen ist, wird die Rückruffunktion ausgeführt.

/** 
 * 串行加载指定的脚本
 * 串行加载[异步]逐个加载,每个加载完成后加载下一个
 * 全部加载完成后执行回调
 * @param {Array|String} scripts 指定要加载的脚本
 * @param {Function} callback 成功后回调的函数
 * @return {Array} 所有生成的脚本元素对象数组
 */
function seriesLoadScripts(scripts, callback) {
 if(typeof(scripts) !== 'object') {
  var scripts = [scripts];
 }
 var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;
 var s = [];
 var last = scripts.length - 1;
 //递归
 var recursiveLoad = function(i) {
  s[i] = document.createElement('script');
  s[i].setAttribute('type','text/javascript');
  // Attach handlers for all browsers
  // 异步
  s[i].onload = s[i].onreadystatechange = function() {
   if(!/*@cc_on!@*/0 || this.readyState === 'loaded' || this.readyState === 'complete') {
    this.onload = this.onreadystatechange = null; 
    this.parentNode.removeChild(this);
    if(i !== last) {
     recursiveLoad(i + 1);
    } else if (typeof(callback) === 'function') {
     callback()
    };
   }
  }
  // 同步
  s[i].setAttribute('src', scripts[i]);
  HEAD.appendChild(s[i]);
 };
 recursiveLoad(0);
}
/**
 * 并行加载指定的脚本
 * 并行加载[同步]同时加载,不管上个是否加载完成,直接加载全部
 * 全部加载完成后执行回调
 * @param {Array|String} scripts 指定要加载的脚本
 * @param {Function} callback 成功后回调的函数
 * @return {Array} 所有生成的脚本元素对象数组
 */ 
function parallelLoadScripts(scripts, callback) {
 if(typeof(scripts) !== 'object') {
  var scripts = [scripts];
 }
 var HEAD = document.getElementsByTagName('head')[0] || document.documentElement;
 var s = [];
 var loaded = 0;
 for(var i = 0; i < scripts.length; i++) {
  s[i] = document.createElement('script');
  s[i].setAttribute('type','text/javascript');
  // Attach handlers for all browsers
  // 异步
  s[i].onload = s[i].onreadystatechange = function() {
   if(!/*@cc_on!@*/0 || this.readyState === 'loaded' || this.readyState === 'complete') {
    loaded++;
    this.onload = this.onreadystatechange = null;
    this.parentNode.removeChild(this);
    if(loaded === scripts.length && typeof(callback) === 'function') callback();
   }
  };
  // 同步
  s[i].setAttribute('src',scripts[i]);
  HEAD.appendChild(s[i]);
 }
}
Nach dem Login kopieren

Hier wird das <script> -Tag dynamisch in die Seite innerhalb des <head> -Tags eingefügt und das Tag-Element wird nach Abschluss des Ladevorgangs automatisch entfernt.

Verwendung

Hier wird eine Array-Variable deklariert, die zwei Remote-JS-Dateiadressen enthält (natürlich das <script>-Tag-Aufruf-Skript). unterstützt domänenübergreifend):

var scripts = [ 
 "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js",
 "http://wellstyled.com/files/jquery.debug/jquery.debug.js"
];
// 这两个文件分别是 jQuery 1.4.的库文件和 jQuery Debug 插件
// 然后你可以使用下面的方法调用并在成功后执行回调了。
parallelLoadScripts(scripts, function() { 
 /*
 debug = new $.debug({ 
  posTo : { x:'right', y:'bottom' },
  width: '480px',
  height: '50%',
  itempider : '<hr>',
  listDOM : 'all'
 });
 */
 console.log('脚本加载完成啦');
});
Nach dem Login kopieren

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen erhalten Sie Zu anderen verwandten Themen finden Sie den Artikel auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Wie läuft der Javascript-Modul-Loader?

So implementieren Sie eine Back-Force-Aktualisierung im WeChat-Web Seite

So verwenden Sie das React BootStrap-Framework

Das obige ist der detaillierte Inhalt vonNachdem das JS-Skript geladen ist, wird die entsprechende Callback-Funktion ausgeführt.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage