Pregunta

estoy trabajando con ambos amq.js (ActiveMQ) y mapas de Google.Cargo mis scripts en este orden.

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

Sin embargo, en mi application.js carga bien Maps, pero aparece un error al intentar suscribirme a un tema con AMQ.AMQ depende del prototipo y la consola de error en Firefox dice que el objeto no está definido.Creo que tengo un problema al usar el objeto amq antes de que termine de cargarse el script. ¿Hay alguna manera de asegurarme de que ambos scripts se carguen antes de usarlos en mi application.js?

Google tiene esta bonita llamada de función google.setOnLoadCallback(initialize); lo cual funciona muy bien.No estoy seguro de que amq.js tenga algo como esto.

¿Fue útil?

Solución

¿Hay alguna manera de asegurarme de que ambos scripts se carguen antes de usarlos en mi application.js?

Los archivos JavaScript deben cargarse secuencialmente y bloquear entonces, a menos que los scripts de los que depende estén haciendo algo inusual, todo lo que debe hacer es cargar application.js después de los otros archivos.

Descargas de JavaScript sin bloqueo tiene información sobre cómo se cargan los scripts (y analiza algunas técnicas para subvertir el bloqueo).

Otros consejos

Los scripts entre dominios se cargan después de los scripts del sitio mismo, es por eso que aparecen errores.Curiosamente, aquí nadie sabe esto.

en jquery puedes usar:

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

lo que asegura que javascript esté cargado y que dom esté listo antes de hacer tus cosas.

en el prototipo parece que esto podría funcionar

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

Si entiendo tu problema correctamente...Creo que eso puede ayudar..

Si no desea depender de una biblioteca para hacer esto...Creo que esto podría funcionar:

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

Tuve un problema similar a este, solo que con un único script.La solución que se me ocurrió fue utilizar addEventListener("load",fn,false) a un script objeto creado usando document.createElement('script') Aquí está la función final que carga cualquier archivo JS estándar y le permite agregar un script de "postcarga".

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

Espero que esto pueda ayudar a alguien en el futuro.

¿Hay alguna manera de asegurarme de que ambos scripts se carguen antes de usarlos?

Sí.

Coloque el código que desea cargar al final (su application.js cosas) en prototipos documento.observar.Esto debería garantizar que el código se cargue solo después de que el prototipo y otras cosas estén terminados y listos.(Si está familiarizado con jQuery, esta función es similar a la de jQuery $(document).ready )

AMQ depende del prototipo y la consola de error en FireFox dice que el objeto no está definido.

¿Quieres decir que AMQ depende del Biblioteca de prototipos?No puedo ver una importación para esa biblioteca en el código que proporcionaste.

¿Quieres decir que AMQ depende de la ¿Una biblioteca prototipo?No puedo ver una importar para esa biblioteca en el código que has provisto.

Sí, para javascript de ActiveMQ (amq.js) depende del prototipo.En amq.js carga 3 scripts, _amq.js, conductual.js y prototipo.js.

Gracias por su ayuda con el orden de carga de JavaScript wrumsby.Esto me dice que mi error está en otro castillo :(

Supongo que tengo un problema diferente.También revisé los archivos js de ActiveMQ 5.0 a 5.1 y noté que también eran iguales.Algo ha cambiado en 5.0 a 5.1 que requiere una actualización para que los temas se suscriban.Seguiré buscando, pero gracias por eliminar esta posible causa.

También puede utilizar el método javascript integrado de SharePoint para controlar la ejecución de sus scripts;

_spBodyOnLoadFunctionNames.push("yourFunction");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top