2008-11-18 8 views
8

Estoy intentando llamar a una función ActionScript desde javascript, pero estoy teniendo problemas en Internet Explorer. estoy usando Swiff.remote en mootools 1.2.1 para llamar a la función de ActionScript es decir:Javascript para actualizar la comunicación

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

Todo esto funciona bien en Firefox, Safari y Opera, pero estoy recibiendo un error "no especificado" en Internet Explorer 6 y 7. he intentado usar el estándar de pantano:

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

en vano.

Gracias por cualquier ayuda. Marca

+1

¿estás usando as2 o as3? – picardo

Respuesta

5

No estoy familiarizado con el complemento Swiff, pero no necesita un complemento para llamar a las funciones de memoria flash de Javascript. Es incluso más fácil hacerlo de forma nativa.

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

De 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

Esto es exactamente lo que he intentado con: ventana ['flash']. SendResult (resultado, reproducciones, nombre); ¿Cómo hace referencia a su objeto flash? ventana ['flashname/flashid'] –

+0

Ah, por supuesto. Debe haber una forma diferente de agarrar eso en IE. Tal vez algo como window.document.name ... no estoy seguro de eso. – picardo

+0

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

2

Ah, aquí está la respuesta a que un 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> 

SO si el cliente es Internet Explorer, debe buscar la película desde el objeto del documento. :-)

+0

Esto es lo que he intentado y todavía no funcionará. –

+0

¿Qué errores está obteniendo? Esta solución parece sólida, me pregunto si hay otros factores que causan sus problemas. – discorax

0

Quería publicar esta respuesta, ya que puede ser lo que está causando problemas a los demás, obviamente, esto no está causando su problema. Todavía estoy buscando una solución para su problema.

De los Documentos de MooTools: http://mootools.net/docs/Utilities/Swiff Nota:

El archivo SWF se debe compilar con el componente ExternalInterface. Consulte la documentación de Adobe en la Interfaz externa para obtener más información.

Action Script 2,0

import flash.external.*; 

Action Script 3,0

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

Se le puede llamar directamente:

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

Por supuesto sendResult tiene que estar registrado en ExternalInterface.addCallback() en el código como y el archivo flash tiene a plena carga (si no todas las llamadas fallan).

Un ejemplo se puede encontrar en este github repository (fancyupload): El as3proj contiene el origen AS, las llamadas remotas JS están en Swiff.Uploader.js.

0

Si su código funciona en todos los navegadores excepto en Internet Explorer, es una buena apuesta que sea porque Flash Player para IE es un complemento de ActiveX. Leí en alguna parte que ActiveX se comunica en formato .NET y que la API externa de Flash se comunica en XML.

También estoy tratando de aprender la comunicación Javascript-Flash en Internet Explorer, por lo que voy a mantener a la gente publicada sobre lo que aprendo.

Cuestiones relacionadas