JavaScript e ActionScript 3.0 problemi di interazione



JavaScript è l'interazione con ActionScript 3.0 da flash.external.ExternalInterface questa classe, ma con Flash 8 e ActionScript 2.0 nell'interazione con l'uso di flash.external.ExternalInterface o diversi. La differenza più grande è il metodo ExternalInterface.addCallback in ActionScript 3.0, solo due parametri, mentre nessun caso di più di questo parametro. Si tratta di questioni da discutere qui sotto sono in Flash 9 ActionScript 3.0 in.

Il primo è il problema più comune, cioè, chiamare il metodo JavaScript Flash ActionScript nella relazione che il metodo non esiste. Il problema è con Flash per l'attuazione del tempo legati ExternalInterface.addCallback, ExternalInterface.addCallback deve essere completamente caricato nel HTML dopo l'evento window.onload è l'applicazione prima di poter essere applicate, in caso contrario, non può essere rilasciato nel metodo JavaScript chiamata.

Per risolvere questo problema di ActionScript 3.0 in Flash 9 per aiutare in un caso che contiene la soluzione, che è il primo in js nella creazione di due segni, come jsReady e swfReady queste due variabili come un simbolo, sono impostate per falsa partenza , quando il window.onload, impostare jsReady su true, Flash, JavaScript nel segno di spunta se il vero inizio jsReady (tramite bando ExternalInterface.call metodo JavaScript in una funzione per restituire la bandiera), se non è vero, per impostare un timer, dopo un periodo di tempo (per esempio 50 o 100 millisecondi) di ripetere questo controllo questa bandiera, una volta il vero, l'attuazione di ActionScript per fornire ExternalInterface.addCallback di pubblicare una chiamata alla funzione JavaScript o il metodo, l'attuazione di tutte completate ExternalInterface.addCallback dopo la chiamata al metodo JavaScript da ExternalInterface.call in una funzione per impostare flag swfReady set swfReady come vero. Più tardi, quando viene rilevato JavaScript swfReady è vero, quindi chiamare il metodo in ActionScript non incontro che su questo tema.

Se si chiama questo una cosa semplice possibile, quindi se c'è un sacco di chiamate relativamente guai. Ero attraverso l'istituzione di due code di esecuzione: jsTaskQueue e swfTaskQueue, come prima in jsReady è vero, se l'operazione di invocare ActionScript, questa operazione messa in jsTaskQueue, quando il js nel window.onload set jsReady eseguire quando il Il compito della coda per tenere fuori l'applicazione, quando swfReady jsReady dopo così vero come vero prima, se l'operazione per invocare ActionScript, metti questa operazione into swfTaskQueue, quando ActionScript JavaScript da chiamare sign metodo ExternalInterface.call in ambiente swfReady La funzione imposta swfReady è vero, a prendere questo compito in coda per l'esecuzione. Quando jsReady e swfReady sono vere, allora se l'operazione di invocare ActionScript gestito direttamente su di esso. In questo modo il pacchetto di tali compiti, l'use di questi pacchetti dopo l'operazione, in preparazione del del codice può essere sequenziale (non asincrone) to write, and is execution l'ordine di attuazione del diritti.

In aggiunta ai problemi più frequenti, ci sono due sui problemi di IE.

Se si sono dinamicamente tramite JavaScript nella scheda Flash e quindi inserire Chuang Jian html Dao nelle parole (per esempio, assegnando il metodo innerHTML o il metodo appendChild), è possibile è fatto nel window.onload voi questo, solo dopo, in questo caso, Qi Ta normale interazione browser che supporti JavaScript e ActionScript 3.0, IE non può. Pertanto, l'assicurazione, il modo migliore è scrivere direttamente a lampeggiare tag html in html nel corpo, o l'uso di JavaScript document.write per scrivere il codice html del corpo nella parte posteriore di questo approccio è più appropriato per IE, perché in tal caso, non fare clic è possibile attivare Flash.

Un altro problema è, non pubblicare in ActionScript per invocare il nome del metodo, o in IE,, errore JavaScript quando si chiama il metodo.

L'ultima domanda, online il più può essere trovato, e non è a lampeggiare in forma, sarebbe in in IE, errore JavaScript quando viene chiamato ActionScript. Certo, Internet ha anche dato uno script per risolvere questo problema, ma che è apparentemente l'ActionScript 2.0 di Flash 8, non ho provato, non so ActionScript 3.0 è altrettanto efficace.

Se si chiama in ActionScript JavaScript attraverso ExternalInterface.call, se i parametri passati stringa, quindi se la stringa contiene il simbolo, allora la chiamata avrà esito negativo. Si tratta di un bug interattivo ActionScript e JavaScript, la soluzione è, sul trasferimento della corda per circa il primo accordo nella trasmissione, il trattamento è molto semplice da trasferire dati quali dati, sarà un data.replace (/ \ / "\ \") sostituita in seguito, passò alla JavaScript su di esso.