2008-11-18 21 views
8

Sto provando a chiamare una funzione Actionscript da javascript ma sto riscontrando problemi in Internet Explorer. Sto usando Swiff.remote in MooTools 1.2.1 per chiamare la funzione ActionScript cioè:Javascript to flash communication

Swiff.remote(playSwf.toElement(), 'sendResult', result, plays, name); 

Tutto questo funziona bene in Firefox, Safari e Opera, ma sto ottenendo un errore "non specificato" in Internet Explorer 6 e 7. ho provato con il classico standard:

window['flash'].sendResult(result, plays, name); 

inutilmente.

Grazie per qualsiasi aiuto. Mark

+1

stai usando as2 o as3? – picardo

risposta

5

Non ho familiarità con il plug-in Swiff, ma non è necessario un plug-in per chiamare le funzioni flash da Javascript. È ancora più semplice farlo in modo nativo.

Da AS:

//1. calling javascript function from Flash. 
ExternalInterface.call("sendData",tempStr); 
// argument 1: javascript function, argument 2: data/variables to pass out. 
//2. calling javascript function from Flash with recursion. 
var returnValue:String = ExternalInterface.call("sendReturn",tempStr).toString(); 
//3. setting up a callback function for javascript 
ExternalInterface.addCallback("callFlash",flashResponse); 
// argument 1: function name called by javascript, argument 2: function on the Flash side. 
// AS2 version looks like this : ExternalInterface.addCallback("callFlash",null,flashResponse); 

Da JS:

//1. javascript function as called from Flash. 
function sendData(val){ 
    alert(val); 
    document.flashForm.flashOutput.value = val; 
} 

//2. javascript function with recursion. 
function sendReturn(val){ 
    var tempData = "Hello from JS"; 
    return tempData + ' :return'; 
} 

//3. calling Flash function with javascript. 
function sendToFlash(val){ 
    window['flash'].callFlash(val); 
} 
+0

Questo è esattamente ciò che ho provato con: window ['flash']. SendResult (result, plays, name); Come stai riferendo il tuo oggetto flash? window ['flashname/flashid'] –

+0

Ah, ovviamente. Ci deve essere un modo diverso di afferrarlo in IE. Forse qualcosa come window.document.name ... non è sicuro su questo. – picardo

+0

Prova window.document.getElementsByName ('flashname'). – picardo

2

Ah, ecco la risposta a voi problema.

<form> 
    <input type="button" onclick="callExternalInterface(id)" value="Call ExternalInterface" /> 
</form> 
<script> 
function callExternalInterface(id) { 
    thisMovie("externalInterfaceExample").callAS(id); 
} 

function thisMovie(movieName) { 
    if (navigator.appName.indexOf("Microsoft") != -1) { 
     return window[movieName] 
    } 
    else { 
     return document[movieName] 
    } 
} 
</script> 

Quindi, se il client è Internet Explorer, è necessario recuperare il film dall'oggetto documento. :-)

+0

Questo è quello che ho provato e ancora non funzionerà. –

+0

Quali errori stai ottenendo? Questa soluzione sembra valida, mi chiedo se ci siano altri fattori che causano i tuoi problemi. – discorax

0

Volevo pubblicare questa risposta, in quanto questo potrebbe essere essere ciò che sta causando problemi per gli altri, ovviamente questo non sta causando il vostro problema. Sto ancora esaminando una soluzione per il tuo problema.

dalla documentazione MooTools: http://mootools.net/docs/Utilities/Swiff Nota:

Il file SWF deve essere compilato con il componente ExternalInterface. Consultare la documentazione di Adobe sull'interfaccia esterna per ulteriori informazioni.

Action Script 2,0

import flash.external.*; 

Action Script 3,0

package com 
{ 
    import flash.external.ExternalInterface; 
    public class Main 
    { 
    } 
} 
0

Si può chiamare direttamente:

playSwf.remote('sendResult', result, plays, name) 

Naturalmente sendResult deve essere registrato con ExternalInterface.addCallback() nel codice come e il file Flash deve pieno carico (in caso contrario tutte le chiamate falliscono).

Un esempio può essere trovato in questo github repository (fancyupload): As3proj contiene la fonte AS, le chiamate remote JS sono in Swiff.Uploader.js.

0

Se il tuo codice funziona in tutti i browser eccetto Internet Explorer, è una buona scommessa che sia perché Flash Player per IE è un plugin ActiveX. Ho letto da qualche parte che ActiveX comunica in formato .NET e l'API esterna di Flash comunica in XML.

Sto anche cercando di imparare la comunicazione Javascript-Flash su Internet Explorer, quindi terrò che la gente venga pubblicata su ciò che imparo.