Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508

    Mettere in comunicazione 2 swf separati

    Su una pagina ho 2 filmati, sul primo ci sono dei pulsanti, sul secondo un campo di testo dinamico.

    C'è un modo affinché cliccando su un pulsante del primo filmato, il testo sul secondo cambi?

    Sto provando con una classe fatta così:
    codice:
    package {
    	public class MyGlobals {
    		public static var titolopagina:String;
    	}
    }
    messa in un file MyGlobals.as
    La importo in entrambi ma penso che ogni filmato abbia un'istanza diversa della classe.

    C'è un modo per fare ciò di cui ho bisogno?

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    Ciao.

    Per una cosa del genere dovresti utilizzare la classe LocalConnection.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Grazie, ci sto provando, ma per quanto semplice sembra che sia usare questa classe, la comunicazione non mi funziona.

    Il primo swf è posto in un frame (parlo di html, non frame di flash) e contiene 4 pulsanti.
    Il codice su questo primo swf è
    codice:
    home_btn.addEventListener(MouseEvent.CLICK,gotoHome);
    
    var conn:LocalConnection = new LocalConnection();
    function gotoHome(e:MouseEvent):void {
        var url:URLRequest=new URLRequest('home.html');
        conn.send("cambiatitolo","titoloHome");
        navigateToURL(url,"content");
    }
    Il secondo swf è in un altro frame sulla stessa pagina del primo, contiene un campo di testo dinamico e il codice che ho è questo:
    codice:
    var conn:LocalConnection = new LocalConnection();
    
    function titoloHome():void {
        titolo_txt.text = "Home Page";
    }
    
    conn.connect("cambiatitolo");
    Clicco sul pulsante home_btn, mi si apre la pagina associata in un terzo frame (quindi il click viene correttamente intercettato), ma il titolo sul secondo swf non cambia.

    C'è qualcosa di sbagliato nel codice? Manca qualcosa?
    Sto usando AS3.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Risolto, non avevo definito il client.

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    Ciao.

    Prova a definire la proprietà "client" dell'istanza LocalConnection che crei nel filmato ricevente:

    codice:
    var conn:LocalConnection = new LocalConnection();
    
    conn.connect("cambiatitolo");
    conn.client=this;
    
    function titoloHome():void {
        titolo_txt.text = "Home Page";
    }

    EDIT: ho visto ora che avevi già risolto
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Mi si è presentato un altro problema.

    Appena accedo alla pagina la comunicazione non funziona, faccio un refresh e funziona regolarmente, faccio un altro refresh e non funziona più, refresh e funziona... e così via.
    Una volta va e una no, non perde un colpo, sempre così.

    C'è una qualche sincronizzazione da gestire? Come?

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    Personalmente non saprei..
    Ho provato online il tuo script con FF 3.6, flashplayer 10, su vista e non ho quel problema.

    Tu stai provando in locale oppure online?
    Hai provato a vuotare la cache?
    Hai testato su diversi browser?
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Ho provato ora su diversi browser, mi capita solo con Firefox 3.6.12, anche svuotando la cache.
    Su Opera, Safari, Chrome e IE invece funziona a dovere.
    Sono in locale.

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    Sì, hai ragione. Ho il tuo stesso problema provando in locale con FF.
    Perlomeno hai focalizzato il problema, non ho idea da cosa possa dipendere ma posso fare qualche prova a livello di script.
    Nel caso attendi altre risposte o eventualmente avverti se riesci a venirne a capo.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  10. #10
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    La cosa mi sembra interessante così ho fatto qualche prova per capire quale fosse il problema e come poterlo risolvere.

    Premetto che ho fatto dei test in maniera empirica giungendo a diverse possibili soluzioni ma potrebbero esserci altre soluzioni più mirate per questo tipo di problema (anche se cercando non ho trovato nulla in merito).

    Partiamo dal fatto che il problema si presenta (da quanto sembra) solo su firefox facendo girare i filmati della pagina html in locale.

    Sul filmato "di invio", oltre lo script iniziale, ho inserito un evento all'oggetto LocalConnection in modo che mi fosse restituito lo STATUS della connessione per capire cos'è che andava storto.
    Una cosa tipo:

    codice:
    conn.addEventListener(StatusEvent.STATUS, onStatusEvent);
    function onStatusEvent(e:StatusEvent):void {
    	alert.text=e;
    }
    Nella mia casella "alert", quando la connessione va a buon fine, viene stampato il seguente messaggio:

    codice:
    [StatusEvent type="status" bubbles=false cancelable=false eventPhase=2 code=null level="status"]
    ...dove level="status" (che ho evidenziato) indica che la connessione è andata a buon fine, mentre quando il coso non funziona si può notare il valore di errore per la proprietà level:

    codice:
    [StatusEvent type="status" bubbles=false cancelable=false eventPhase=2 code=null level="error"]
    Questo errore viene dato normalmente se la connessione non è avvenuta per un qualsiasi motivo o se in qualche modo quella stessa connessione è stata persa e non viene più riconosciuta.
    Venendo al dunque, quando su firefox (in locale) si fa "aggiorna pagina", è come se la vecchia connessione resti ancora aperta per qualche decimo di secondo nel momento in cui viene comunque aggiornato il contenuto della pagina, creando così una sorta di tilt per la nuova connessione che si sta cercando di stabilire, perché questa avrà comunque lo stesso nome di connessione.

    Non ho idea del perché firefox si comporti così in locale ma presumo che dipenda dalla gestione delle sessioni e dei vari eventi di tale browser. Il problema non si presenta online perché probabilmente ci sono di mezzo i tempi di trasmissione dati che, presumo, danno modo di chiudere correttamente la connessione pre-esistente per riaprire poi la nuova senza creare conflitti.

    Ho trovato al momento 3 diverse soluzioni.

    1- agire da javascript aggiungendo un timer nel codice di embed dei filmati in modo da attendere in qualche modo la chiusura della connessione prima che siano aggiornati i filmati sulla pagina.
    Ad esempio se si usa swfobject si avrà una cosa tipo:

    Codice PHP:
    <script type="text/javascript">
      
    setTimeout(function(){
        
    swfobject.embedSWF("filmatoSend.swf","swf1","550","400","9.0.0");
        
    swfobject.embedSWF("filmatoListen.swf","swf2","200","100","9.0.0");
      },
    100)
    </script> 
    Ovviamente il tempo di 100 millisecondi farà vedere un vuoto, seppure per un attimo, al caricamento della pagina.

    2- da AS forzare la chiusura della connessione una volta fatto il suo dovere.
    Ad esempio, considerando il tuo script nel filmato in ascolto:

    Codice PHP:
    var conn:LocalConnection = new LocalConnection();
    conn.connect("cambiatitolo");
    conn.client=this;
    function 
    titoloHome():void {
        
    titolo_txt.text="Home Page";
        
    conn.close();

    Da tenere conto che però la connessione resterà chiusa una volta eseguita l'azione di scrittura del testo. In questo caso è sicuramente un problema perché la connessione serve comunque aperta per gli altri eventuali pulsanti che la richiamano.
    Ho provato a inserire il close all'interno di un evento UNLOAD, in modo da chiudere la connessione solo quando venisse chiuso anche il filmato, ma non ho avuto esito positivo.

    3- A mio parere la soluzione migliore è quella di assegnare un nuovo nome ogni volta che si va a riaprire una nuova connessione in modo che sia scongiurato qualsiasi conflitto di eventuali connessioni rimaste aperte. Questo può essere fatto passando un valore univoco da javascript ai due swf (ad es. con getTime), come una sorta di chiave di connessione tra i filmati stessi, e riutilizzare, all'interno dei filmati, quel valore per comporre il nome della connessione.

    Quindi si avrà uno script JS del tipo:

    Codice PHP:
    <script type="text/javascript">
        var 
    id=new Date().getTime();
        
    swfobject.embedSWF("filmato1.swf?id=" id,"swf1","400","800","9.0.0");
        
    swfobject.embedSWF("filmato2.swf?id=" id,"swf2","200","100","9.0.0");
    </script> 
    Mentre nei filmati (ovviamente in entrambi) si andrà a comporre il nome con uno script tipo:

    Codice PHP:
    var id this.loaderInfo.parameters.id;
    var 
    conn:LocalConnection = new LocalConnection();
    //...
        
    conn.send("cambiatitolo"+id,"titoloHome"); 
    Questa soluzione, per via della necessità di assegnare uno stesso nome di connessione, potrebbe presentare problemi qualora si debba creare la connessione tra filmati che non siano richiamati contemporaneamente e all'interno della stessa pagina (non è questo il caso).

    In conclusione, spero possa comunque tornare utile anche se il problema ad ogni modo sembra non esserci se il tutto è messo online.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.