pagina Orden de carga de JavaScript




llamar javascript desde html (7)

Estoy trabajando con amq.js (ActiveMQ) y Google Maps . Cargué 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 que la consola de error en Firefox dice que el objeto no está definido. Creo que tengo un problema con el uso del objeto amq antes de que el script termine de cargarse. ¿Hay alguna manera de asegurarse de que ambos scripts se carguen antes de usarlos en mi application.js?

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


en jquery puedes usar:

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

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

en 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 quieres confiar en una lib para hacer esto ... creo que esto podría funcionar:

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

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

¿Quiere decir que AMQ depende de la biblioteca Prototype ? No puedo ver una importación para esa biblioteca en el código que ha proporcionado.


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

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 forma de asegurarse de que ambos scripts se carguen antes de usarlos?

Sí.

Pon el último código que quieras cargar (tus cosas de application.js ) en el document.observe del prototipo. Esto debería garantizar que el código se cargará solo después de que el prototipo y otras cosas estén terminadas y listas. (Si está familiarizado con jQuery, esta función es similar a jQuery's $(document).ready )


Las secuencias de comandos de dominios cruzados se cargan después de las secuencias de comandos del sitio, por eso se obtienen errores. Curiosamente, nadie sabe esto aquí.


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

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

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


¿Quiere decir que AMQ depende de la biblioteca Prototype? No puedo ver una importación para esa biblioteca en el código que ha proporcionado.

Sí, para javascript de ActiveMQ (amq.js) depende de Prototype. En el amq.js, carga 3 scripts, _amq.js, behaviour.js y prototype.js.

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

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





activemq