Heim > Web-Frontend > js-Tutorial > Hauptteil

Zusammenfassung von Methodenbeispielen zum dynamischen Laden von Skripten in js_javascript-Kenntnissen

WBOY
Freigeben: 2016-05-16 15:34:11
Original
1197 Leute haben es durchsucht

Das Beispiel in diesem Artikel beschreibt die Methode zum dynamischen Laden von Skripten in js. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Vor Kurzem muss das Front-End-Kartenprodukt des Unternehmens in Module unterteilt werden. Es besteht die Hoffnung, dass Benutzer entsprechend der von ihnen verwendeten Funktion laden.

Also habe ich überall gesucht, um das Laden dynamischer JS-Skripte zu untersuchen, aber es ist wirklich traurig! , es gibt fast die gleichen Artikel im Internet, 4 Methoden Ich hasse Leute, die die Ergebnisse anderer Leute kopieren und keinen Link zum Originalartikel hinzufügen. Warum! Der Punkt ist, dass die letzte Methode immer noch ein wenig falsch ist. Nach zwei Tagen Recherche und Information möchte ich es hier mit euch teilen.

Zuerst müssen wir eine package.js in einem festen Ordner erstellen. Nachdem ich sie geöffnet habe, ist der Code wie folgt

function functionOne(){
  alert("成功加载");
}
Nach dem Login kopieren
Die nachfolgenden HTML-Dateien werden alle im selben Verzeichnis erstellt.

Methode 1: Direkt document.write

Erstellen Sie eine function1.html im selben Ordner mit dem folgenden Code:

<html>
<head>
  <title></title>
  <script type="text/javascript">
    function init()
    {
      //加载js脚本
      document.write("<script src='package.js'><\/script>");
      //加载一个按钮
      document.write("<input type=\"button\" value=\"测试运行效果\" onclick=\"operation()\"\/>");
      //如果马上使用会找不到,因为还没有加载进来,此处会报错
      functionOne();
    }
    function operation()
    {
      //可以运行,显示“成功加载”
      functionOne();
    }
  </script>
</head>
<body>
  <input type="button" value="初始化加载" onclick="init()"/>
</body>
</html>
Nach dem Login kopieren
Sie können über document.write Skripte auf die Seite schreiben. Wie im Code gezeigt, können Sie die Datei package.js laden, nachdem Sie auf die Schaltfläche „Initial Load“ geklickt haben. Wenn Sie jedoch die Methode functionOne sofort ausführen, ist dies nicht der Fall Ich konnte diese Methode nicht finden, aber durch Klicken auf die zweite Schaltfläche („Test Running Effect“, dynamisch erstellt durch document.write), wurde festgestellt, dass sie ausgeführt werden kann. Zu diesem Zeitpunkt wurde das Skript geladen. Da es sich bei dieser Methode um ein asynchrones Laden handelt (während die Ausführung des folgenden Codes fortgesetzt wird, wird ein zusätzlicher Thread geöffnet, um das zu ladende Skript auszuführen) und document.write die Schnittstelle neu schreibt, was offensichtlich nicht praktikabel ist.

Methode 2: Ändern Sie dynamisch das src-Attribut eines vorhandenen Skripts

Erstellen Sie eine function2.html im selben Ordner mit dem folgenden Code:

<html>
<head>
  <title></title>
  <script type="text/javascript" id="yy" src=""></script>
  <script type="text/javascript">
    function init()
    {
      yy.src = "package.js";
      //如果马上使用会找不到,因为还没有加载进来,此处会报错
      functionOne();
    }
    function operation()
    {
      //可以运行,显示“成功加载”
      functionOne();
    }
  </script>
</head>
<body>
  <input type="button" value="测试按钮" onclick="init()"/>
  <input type="button" value="测试运行效果" onclick="operation()"/>
</body>
</html>
Nach dem Login kopieren
Der Vorteil dieser Methode besteht darin, dass sie die Schnittstellenelemente nicht ändert und die Schnittstellenelemente nicht neu schreibt. Sie wird jedoch auch asynchron geladen und weist das gleiche Problem auf.

Methode 3: Skriptelemente dynamisch erstellen (asynchron)

Erstellen Sie eine function3.html im selben Ordner mit dem folgenden Code:

<html>
<head>
  <title></title>
  <script type="text/javascript">
    function init()
    {
      var myScript= document.createElement("script");
      myScript.type = "text/javascript";
      myScript.src="package.js";
      document.body.appendChild(myScript);
      //如果马上使用会找不到,因为还没有加载进来
      functionOne();
    }
    function operation()
    {
      //可以运行,显示“成功加载”
      functionOne();
    }
  </script>
</head>
<body>
  <input type="button" value="测试按钮" onclick="init()"/>
  <input type="button" value="测试运行效果" onclick="operation()"/>
</body>
</html>
Nach dem Login kopieren
Der Vorteil dieser Methode gegenüber der zweiten Methode besteht darin, dass zu Beginn kein Skript-Tag in die Schnittstelle geschrieben werden muss. Der Nachteil ist das asynchrone Laden und das gleiche Problem.

Diese drei Methoden werden alle asynchron ausgeführt, sodass die Skripte auf der Hauptseite beim Laden dieser Skripte weiterhin ausgeführt werden. Wenn die oben genannten Methoden verwendet werden, hat der folgende Code nicht die erwartete Wirkung.

Sie können jedoch vor functionOne eine Warnung hinzufügen, um die Ausführung des Hauptseitenskripts zu blockieren. Dann stellen Sie fest, dass functionOne ausgeführt werden kann, oder Ihr späterer Code muss unter einer anderen Schaltfläche ausgeführt werden. Oder definieren Sie einfach einen Timer und führen Sie den folgenden Code nach einer festgelegten Zeit aus. Es ist jedoch definitiv unmöglich, diese Methoden im Projekt zu verwenden.

Tatsächlich kann die dritte Methode mit ein paar Änderungen auf synchrones Laden umgestellt werden.

Methode 4: Skriptelemente dynamisch erstellen (synchron)

Erstellen Sie eine function4.html im selben Ordner mit dem folgenden Code:

<html>
<head>
  <title></title>
  <script type="text/javascript">
    function init()
    {
      var myScript= document.createElement("script");
      myScript.type = "text/javascript";
      myScript.appendChild(document.createTextNode("function functionOne(){alert(\"成功运行\"); }"));
      document.body.appendChild(myScript);
      //此处发现可以运行
      functionOne();
    }
  </script>
</head>
<body>
  <input type="button" value="测试按钮" onclick="init()"/>
</body>
</html>
Nach dem Login kopieren
Diese Methode lädt keine externen JS-Dateien, sondern fügt Unterelemente zu myScript hinzu. In Firefox, Safari, Chrome, Opera und IE9 funktioniert dieser Code einwandfrei. Es führt jedoch zu Fehlern in IE8 und niedrigeren Versionen. IE behandelt
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage