Frage

Ich arbeite mit beiden amq.js (ActiveMQ) und Google Maps.Ich lade meine Skripte in dieser Reihenfolge

<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    <title>AMQ & Maps Demo</title>

    <!-- Stylesheet -->
    <link rel="stylesheet" type="text/css" href="style.css"></link>

    <!-- Google APIs -->
    <script type="text/javascript" src="http://www.google.com/jsapi?key=abcdefg"></script>

    <!-- Active MQ -->
    <script type="text/javascript" src="amq/amq.js"></script>
    <script type="text/javascript">amq.uri='amq';</script>

    <!-- Application -->
    <script type="text/javascript" src="application.js"></script>
</head>

In meiner application.js lädt es Maps jedoch einwandfrei, aber ich erhalte eine Fehlermeldung, wenn ich versuche, ein Thema mit AMQ zu abonnieren.AMQ hängt vom Prototyp ab, von dem die Fehlerkonsole in Firefox sagt, dass das Objekt nicht definiert ist.Ich glaube, ich habe ein Problem mit der Verwendung des amq-Objekts, bevor das Skript vollständig geladen ist. Gibt es eine Möglichkeit sicherzustellen, dass beide Skripte geladen werden, bevor ich sie in meiner application.js verwende?

Google hat diesen netten Funktionsaufruf google.setOnLoadCallback(initialize); was super funktioniert.Ich bin nicht sicher, ob amq.js so etwas hat.

War es hilfreich?

Lösung

Gibt es eine Möglichkeit sicherzustellen, dass beide Skripte geladen werden, bevor ich sie in meiner application.js verwende?

JavaScript-Dateien sollten nacheinander geladen werden und blockieren Wenn also die Skripte, auf die Sie angewiesen sind, nichts Ungewöhnliches tun, müssen Sie lediglich application.js nach den anderen Dateien laden.

Nicht blockierende JavaScript-Downloads enthält einige Informationen darüber, wie Skripte geladen werden (und erläutert einige Techniken, um die Blockierung zu unterlaufen).

Andere Tipps

Domänenübergreifende Skripte werden nach den Skripten der Website selbst geladen. Aus diesem Grund erhalten Sie Fehlermeldungen.Interessanterweise weiß das hier niemand.

in jquery können Sie Folgendes verwenden:

$(document).ready(function(){/*do stuff here*/});

Dadurch wird sichergestellt, dass das Javascript geladen und der Dom bereit ist, bevor Sie Ihre Arbeit erledigen.

Im Prototyp sieht es so aus, als ob das funktionieren könnte

document.observe("dom:loaded", function() {/*do stuff here*/});

Wenn ich Ihr Problem richtig verstehe..Ich denke, das könnte helfen..

Wenn Sie sich dabei nicht auf eine Bibliothek verlassen möchten ...Ich denke, das könnte funktionieren:

<script>
   function doIt() {/*do stuff here*/}
</script>
<body onLoad="doIt();"></body>

Ich hatte ein ähnliches Problem, nur mit einem einzigen Skript.Die Lösung, die ich gefunden habe, war zu verwenden addEventListener("load",fn,false) zu einem script Objekt erstellt mit document.createElement('script') Hier ist die letzte Funktion, die jede Standard-JS-Datei lädt und Ihnen das Hinzufügen eines „Post-Load“-Skripts ermöglicht.

function addJavaScript( js, onload ) {
   var head, ref;
   head = document.getElementsByTagName('head')[0];
   if (!head) { return; }
   script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = js;
   script.addEventListener( "load", onload, false );
   head.appendChild(script);
}

Ich hoffe, dass dies in Zukunft jemandem helfen kann.

Gibt es eine Möglichkeit sicherzustellen, dass beide Skripte geladen werden, bevor ich sie verwende?

Ja.

Geben Sie den Code, den Sie laden möchten, zuletzt ein (Ihren application.js Sachen) in Prototypen umwandeln document.observe.Dies sollte sicherstellen, dass der Code erst geladen wird, nachdem der Prototyp und andere Dinge fertig und bereit sind.(Wenn Sie mit jQuery vertraut sind, ähnelt diese Funktion der von jQuery $(document).ready )

AMQ hängt vom Prototyp ab, von dem die Fehlerkonsole in FireFox sagt, dass das Objekt nicht definiert ist.

Meinen Sie, dass AMQ davon abhängt? Prototypenbibliothek?Ich kann in dem von Ihnen bereitgestellten Code keinen Import für diese Bibliothek erkennen.

Meinen Sie, dass AMQ von der Prototyp-Bibliothek?Ich kann keine Importieren für diese Bibliothek im Code die Sie zur Verfügung gestellt haben.

Ja, das Javascript (amq.js) von ActiveMQ hängt von Prototype ab.In amq.js werden drei Skripte geladen: _amq.js, behaviour.js und Prototyp.js.

Vielen Dank für Ihre Hilfe bei der JavaScript-Ladereihenfolge, wrumsby.Das sagt mir, dass mein Käfer in einem anderen Schloss ist :(

Ich glaube, ich habe ein anderes Problem.Ich habe auch die js-Dateien von ActiveMQ 5.0 bis 5.1 überprüft und festgestellt, dass sie ebenfalls gleich waren.In 5.0 bis 5.1 hat sich etwas geändert, das eine Aktualisierung erfordert, damit die Themen abonniert werden können.Ich werde weiter suchen, aber danke, dass Sie diese mögliche Ursache beseitigt haben.

Sie können auch die integrierte SharePoint-Javascript-Methode verwenden, um die Ausführung Ihrer Skripte zu steuern.

_spBodyOnLoadFunctionNames.push("yourFunction");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top