Ordre De Chargement JavaScript

Je travaille avec les deux amq.js (ActiveMQ) et Google Maps . Je charge mes scripts dans cet ordre

<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>

Cependant dans ma demande.js il charge bien les cartes mais je reçois une erreur en essayant de m'abonner à un sujet avec AMQ. AMQ dépend du prototype dont la console d'erreur dans Firefox dit que l'objet n'est pas défini. Je pense que j'ai un problème avec l'utilisation de l'objet amq avant que le script ne soit terminé le chargement. Existe-t-il un moyen de s'assurer que les deux scripts se chargent avant de les utiliser dans mon application.js?

Google a cette belle fonction call google.setOnLoadCallback(initialize); qui fonctionne très bien. Je ne suis pas sûr amq.js a quelque chose comme ça.

29
demandé sur ekad 2008-08-21 02:53:25

8 réponses

Existe-t-il un moyen de s'assurer que les deux scripts se chargent avant de les utiliser dans mon application.js?

Les fichiers JavaScript doivent charger séquentiellement et bloquer {[8] } donc, à moins que les scripts dont vous dépendez ne fassent quelque chose d'inhabituel, tout ce que vous devez faire est de charger l'application.js après les autres fichiers.

Téléchargements JavaScript Non bloquants contient des informations sur la façon dont les scripts se chargent (et discute de certaines techniques pour subvertir le blocage).

27
répondu Walter Rumsby 2008-08-21 04:46:39

Les scripts inter-domaines sont chargés après les scripts du site lui-même, c'est pourquoi vous obtenez des erreurs. fait intéressant, personne ne le sait ici.

44
répondu John Doe 2011-02-28 21:45:55

Dans jquery, vous pouvez utiliser:

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

Qui s'assure que le javascript est chargé et que le dom est prêt avant de faire vos affaires.

Dans prototype, il semble que cela pourrait fonctionner

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

Si je comprends bien votre problème.. Je pense que cela peut aider..

Si vous ne voulez pas compter sur une lib pour le faire... Je pense que cela pourrait fonctionner:

<script>
   function doIt() {/*do stuff here*/}
</script>
<body onLoad="doIt();"></body>
10
répondu danb 2008-08-20 23:17:30

J'ai eu un problème similaire à celui-ci, seulement avec un seul script. La solution que j'ai trouvée était d'utiliser addEventListener("load",fn,false) à un objet script Créé en utilisant document.createElement('script') Voici la fonction finale qui charge n'importe quel fichier JS standard et vous permet d'ajouter un script "post load".

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);
}

J'espère que cela peut aider quelqu'un à l'avenir.

7
répondu cmcginty 2009-03-02 10:18:57

Existe-t-il un moyen de s'assurer que les deux scripts se chargent avant de les utiliser?

Oui.

Mettez le code que vous voulez charger en dernier (votre truc application.js) dans le document de prototype.observez . Cela devrait garantir que le code ne se chargera qu'après que prototype + other stuff soit terminé et prêt. (Si vous êtes familier avec jQuery, cette fonction est similaire à $(document).ready de jQuery)

3
répondu maxsilver 2018-01-05 12:51:47

AMQ dépend du prototype dont la console d'erreur dans FireFox dit que l'objet n'est pas défini.

Voulez-vous dire QU'AMQ dépend de la Bibliothèque Prototype ? Je ne vois pas d'importation pour cette bibliothèque dans le code que vous avez fourni.

2
répondu Walter Rumsby 2008-08-21 03:09:52

Voulez-vous dire que AMQ dépend de la Bibliothèque Prototype? Je ne peux pas voir un importer pour bibliothèque dans le code vous avez fournie.

Oui pour le javascript D'ActiveMQ (amq.js) ne dépend pas de Prototype. Dans l'amq.js il charge 3 scripts, _amq.js, le comportement.js et le prototype.js.

Merci pour votre aide sur l'ordre de chargement JavaScript wrumsby. Cela me dit que mon bug est dans un autre château :(

Je suppose que j'ai un problème différent. J'ai également vérifié les fichiers js de ActiveMQ 5.0 à 5.1 et remarqué qu'ils étaient les mêmes aussi bien. Quelque chose a changé dans 5.0 à 5.1 qui nécessite une actualisation pour que les sujets s'abonnent. Je vais continuer à chercher, Mais merci d'avoir éliminé cette cause possible.

2
répondu Bernie Perez 2008-08-21 16:54:08

Vous pouvez également utiliser la méthode javascript SharePoint intégrée pour contrôler l'exécution de vos scripts;

_spBodyOnLoadFunctionNames.push("yourFunction");
0
répondu Brian Scott 2012-08-01 14:31:05