Domanda

Sto lavorando con entrambi amq.js (ActiveMQ) e Google Maps.Carico i miei script in questo ordine

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

Tuttavia nel mio application.js carica correttamente Maps ma ricevo un errore quando provo a iscrivermi a un argomento con AMQ.AMQ dipende dal prototipo per il quale la console degli errori di Firefox indica che l'oggetto non è definito.Penso di avere un problema con l'utilizzo dell'oggetto amq prima che il caricamento dello script sia terminato. Esiste un modo per assicurarsi che entrambi gli script vengano caricati prima di utilizzarli nel mio application.js?

Google ha questa bella chiamata di funzione google.setOnLoadCallback(initialize); che funziona alla grande.Non sono sicuro che amq.js abbia qualcosa del genere.

È stato utile?

Soluzione

Esiste un modo per assicurarsi che entrambi gli script vengano caricati prima di utilizzarli nel mio application.js?

I file JavaScript dovrebbero essere caricati in sequenza e bloccare quindi, a meno che gli script da cui dipendi non facciano qualcosa di insolito, tutto ciò che dovresti fare è caricare application.js dopo gli altri file.

Download JavaScript non bloccanti contiene alcune informazioni su come vengono caricati gli script (e discute alcune tecniche per sovvertire il blocco).

Altri suggerimenti

gli script interdominio vengono caricati dopo gli script del sito stesso, ecco perché si verificano errori.interessante notare che qui nessuno lo sa.

in jquery puoi usare:

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

che assicura che Javascript sia caricato e che il dom sia pronto prima di fare le tue cose.

nel prototipo sembra che potrebbe funzionare

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

Se ho capito bene il tuo problema..Penso che possa aiutare..

Se non vuoi fare affidamento su una libreria per farlo...Penso che questo potrebbe funzionare:

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

Ho avuto un problema simile a questo, solo con un singolo script.La soluzione che ho trovato è stata quella di utilizzare addEventListener("load",fn,false) ad a script oggetto creato utilizzando document.createElement('script') Ecco la funzione finale che carica qualsiasi file JS standard e ti consente di aggiungere uno script "post caricamento".

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

Spero che questo possa aiutare qualcuno in futuro.

C'è un modo per assicurarsi che entrambi gli script vengano caricati prima di utilizzarli?

SÌ.

Inserisci per ultimo il codice che vuoi caricare (your application.js roba) nei prototipi documentare.osservare.Ciò dovrebbe garantire che il codice venga caricato solo dopo che il prototipo e altre cose sono finiti e pronti.(Se hai familiarità con jQuery, questa funzione è simile a quella di jQuery $(document).ready )

AMQ dipende dal prototipo per il quale la console degli errori in FireFox indica che l'oggetto non è definito.

Vuoi dire che AMQ dipende da Biblioteca di prototipi?Non riesco a vedere un'importazione per quella libreria nel codice che hai fornito.

Vuoi dire che AMQ dipende dalla libreria prototipo?Non riesco a vedere un'importazione per quella libreria nel codice che hai fornito.

Sì, il javascript di ActiveMQ (amq.js) dipende da Prototype.In amq.js carica 3 script, _amq.js, behavior.js e prototipo.js.

Grazie per il tuo aiuto nell'ordine di caricamento JavaScript wrumsby.Questo mi dice che il mio bug è in un altro castello :(

Immagino di avere un problema diverso.Ho anche controllato i file js da ActiveMQ 5.0 a 5.1 e ho notato che anche loro erano uguali.Qualcosa è cambiato dalla versione 5.0 alla versione 5.1 e richiede un aggiornamento per la sottoscrizione degli argomenti.Continuerò a cercare, ma grazie per aver eliminato questa possibile causa.

Puoi anche utilizzare il metodo javascript integrato di SharePoint per controllare l'esecuzione dei tuoi script;

_spBodyOnLoadFunctionNames.push("yourFunction");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top