Frage

Wir haben eine Anwendung, dass Verwendungen sowohl die Google-Schließung und Bibliotheken Dojo. Wir haben nach dem in unserer Index-Seite, die wie erwartet funktioniert:


<script type="text/javascript" src="runtime/src/lib/google-closure-rev26/closure/goog/base.js"></script>
<script type="text/javascript" src="runtime/src/lib/dojo_release_132_src/dojo/dojo.js"></script>
<script type="text/javascript" src="runtime/src/core/loader.js"></script>

Wir möchten nur eine Script-Tag in der eigentlichen HTML-Quelle verwenden. So versuchten wir folgendes zu tun:


<head>
   <script type="text/javascript" src="runtime/src-bootstrap.js"></script>
</head>

und dann in src-bootstrap.js:


var head = document.getElementsByTagName("head")[0];

var s1 = document.createElement("script");
s1.type = "text/javascript";
s1.src = "runtime/src/lib/google-closure-rev26/closure/goog/base.js";


var s2 = document.createElement("script");
s2.type = "text/javascript";
s2.src = "runtime/src/lib/dojo_release_132_src/dojo/dojo.js";

var s3 = document.createElement("script");
s3.type = "text/javascript";
s3.src = "runtime/src/core/loader.js";

head.appendChild(s1);
head.appendChild(s2);
head.appendChild(s3);

Doch das funktioniert nicht in FF. Kern / loader.js Läufe vor dojo vollständig geladen. Irgendwelche Ideen, warum dies nicht funktioniert?

War es hilfreich?

Lösung

Für diese Art von Mechanismus, dann würden Sie besser dran document.write () verwenden Ihre Skripte enthalten. Die Technik, die Sie derzeit verwenden ist faul-Laden-Skripten geeignet, und es lädt und führt die Skripte asynchron: http://www.nczonline.net/blog/2009/06/23/loading-javascript-without-blocking/

... oder Sie könnten einen Build-Prozess haben, dass tatsächlich verkettet diese Dateien, und fordern Sie einfach ein Skript, das auch von der Anzahl der Anfragen retten würde, wie das, was hast du eigentlich getan, um die Anzahl der Anforderungen erhöht.

Andere Tipps

Meine Vermutung, dass sein würde, weil Sie die Elemente durch den DOM erstellen, anstatt sie als Markup hat, wird der Browser nicht für ein Skript wartet abgeschlossen sein, bevor die nächste Ausführung (wie es der Fall in einem geraden wäre <script></script><script></script>setup).

Wie über die Skripte in einer kaskadierten Form anhängt (Google Schließung anhängt s2 an seinem Ende, Dojo s3) oder, wie Lee Kowalkowski schlägt vor, das Schreiben <script> Befehle document.write()?

Im Allgemeinen - fügen Sie einen Namensraum unter Fenstern und Bearbeiten von externen Ressourcen -

  1. verläßt eine action.js oder main.js Datei lokal, das ein Verfahren, vorzugsweise unter globalem Bereich (dh unter Fenstern ..) hinzugefügt werden.

  2. bearbeiten Sie Ihre externe Ressource, indem 1 zusätzliche Zeilen am Ende, fordert ein Verfahren auf action.js oder main.js, wenn der Laden wird getan, der „Rückruf wie“ wird ausgeführt, dass die Methode, die Sie zum Hinzufügen habe das DOM zuvor. es funktioniert sehr ähnlich wie JSONProtocol.

  3. es wirkt Wunder auch mit der komplexen Kombination von dynamisch geladenen Ressourcen.

siehe das Beispiel für diese sehr ähnliche Lösung für dynamisch bereitgestellt, um die Google-Closure-Bibliothek Laden auf einem anderen Thread (< a href = "https://stackoverflow.com/a/17226714/257319"> https://stackoverflow.com/a/17226714/257319 )

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top