LocalConnection – interagire con 2 swf

- Letture: 1.977

La classe LocalConnection ci permette di fare comunicare 2 swf separati, inviando e ricevendo variabili invocando metodi e funzioni da un filmato all’ altro.

La classe LocalConnection  ci viene in aiuto, pensiamo ad un menu posizionato nel top della pagina che dovrebbe,  senza  aggiornare o cambiare la pagina, comunicare con un swf posizionato in un punto diverso cosi da poter per esempio cambiare  immagini o sezioni.

La base della classe LocalConnection è la seguente:

  • Swf ricevente

1) Creo un’ istanza della classe LocalConnection

2) Definisco un metodo o i metodi che verrano richiamati da altro o altri swf.

3) Invoco  il metodo connect(“id”), dove l’ id è nome univoco che permetterà il collegamento tra i 2 swf

  • Swf che invia i dati

1) Creo un’ istanza della classe LocalConnection

2) Utilizzo il metodo send della classe LocalConnection: send(“idRicevente”, “funzione” , parametri) dove:

idRicevente è l’ id che abbiamo utilizzato per il metodo connect dell’ swf ricevente
funzione è il metodo invocato per comunicare con il filmato ricevente
parametri sono una serie di parametri che invieremo

Andiamo ad analizzare il codice

Codice per l’swf ricevente

// creo l' istanza della classe LocalConnection
var receiving_lc:LocalConnection = new LocalConnection();
// inizializzo un metodo stampa: questo metodo sarà chiamato dall' altro swf
receiving_lc.stampa = function(parametro:Number) {
// stampo il parametro inviato
  trace("ho ricevuto: "+parametro);
};
receiving_lc.connect("idname");

Codice per l’swf che invia i dati

// creo l' istanza della classe LocalConnection
var sending_lc:LocalConnection = new LocalConnection();
// utilizzo il metodo send per invocare il metodo stampa passando i secondi del sistema
sending_lc.send("idname", "stampa", new Date().getSeconds());

Scarica il sorgente
Guarda il Tutorial 

Stratega, Docente, Speaker con più di 12 anni di esperienza in strategie creative multicanale. Oggi sono Partner & Chief Innovation Officer di ThinkingHat, Innovation Studio specializzato in tecnologie emergenti per aziende e brand audaci.

15 Commenti

  1. Nikolino

    Ciao Julius, volevo farti una piccola domandi sulle local connection…
    Ho collegato due file swf con una local connection. Praticamente uno dei 2 file non parte fino a che l’atro non ha raggiunto un certo punto. Funziona bene, ma su IE6 quando faccio il refresh(F5) della pagina, il secondo swf non parte. Il problema non si verifica su Firefox. Perchèèèèèèèè??????????
    Sapresti aiutarmi…

  2. Le linee di codice sono inserite su frame diversi? ovvero vengono richiamati nello stesso tempo o no?

    Sulla compatibilità tra IE6 e FF non saprei dirti, mi sembra molto strano…

  3. Nikolino

    In pratica al frame 50 del mio file “inviante” ho lo script che richiama la connessione e la funzione Play, mentre al primo frame del file “ricevente” ho uno stop e lo script che riceve la connessione. Però su IE6 se faccio il refresh non funziona. Strano!!!

  4. Matthew J Head

    Ciao Julius,
    ho notato che per fa funzionare la cosa i due swf devono essere aperti distintamente.
    Ad esempio se dal sender apro l’swf listener e poi gli mando i dati non funziona…
    Tipo in questo modo:

    mybtn.onPress = function(){
    loadMovieNum(“listener.swf”,1);
    sending_lc.send(“idname”, “stampa”, string_to_send);
    }

    Puoi dirmi se sbaglio io o se c’è un altro modo? Grazie!!

  5. interessante…in quest’esempio il listener “stampa” cio’ che riceve dal sender… ma se io volessi per esempio che al click di un pulsante o movimento x o y di un clip del sender accada qualcosa nel listener …. ??

    e’ importante definire l’istanza nel sender…ovvero
    var sending_lc:LocalConnection = new LocalConnection();
    var myArray:Array= new Array(1,2,3,4);

    pero’ poi per inviare il comando?
    esempio se io voglio che nel sender…se esemp _root.onEnterFrame = function if(_root._xmouse<50) quindi il mouse e’ ad una certa posizione …. faccia qualcosa l’altro swf….come posso fare ?

    Inoltre vedo che nel listener va messa sicuro la funzione local Connection
    var receiving_lc:LocalConnection = new LocalConnection();

    pero’ poi la funzione per eseguire il comando ?

  6. Nell’articolo in “Codice per l’swf ricevente” trovi tutti i commenti necessari per capire le azioni

    Il “comando” in questo caso sta sul pulsante che invia il contenuto del campo di testo al swf esterno

  7. grazie per la risposta Julius …ovvero in questa parte di codice ?

    receiving_lc.stampa = function(parametro:Number) {
    // stampo il parametro inviato
    trace(“ho ricevuto: “+parametro);
    };
    receiving_lc.connect(“idname”);

  8. ciao Julius, ho seguito i suggerimenti del tutorial per far comunicare gli swf e il tutto funziona perfettamente su firefox ma non c’è verso di farlo funzionare su internet explorer… sai darmi qualche suggerimento, a nessuno è mai successo???

  9. eh no… è una cosa che mi succede online… non comunicano più, non so come fare!!!!! non hai suggerimenti?

  10. Ciao,
    ho visto che c’erano dei problemi sulla compatibilità nei vari browser;
    purtroppo la riscontro ora con l’uscita di explorer 8, qualcuno sa se c’è la possibilità di risolvere il problema?
    Ciao a tutti

  11. Liberi del darmi del chiucchiolo funziona perfettamente anche su explorer 8.
    ciao ciao

  12. Giuseppe

    Ciao ho un problema con as3 non riesco ad assegnare due pulsanti sullo stesso stage so che c’e’ la soluzione ma l’unoca che ho trovato sino ad adesso e ritornare a as2 o c’e’ qualcuno che puo aiutarmi?

  13. Ciao ho un problemino
    ho creato una maschera ad un immagine e solo che vorrei si attivasse solo al passaggio del mouse e contenesse un link ad una pagina html….
    e possibile farlo?
    potresti darmi una mano

Commenti