Comunidad de diseño web y desarrollo en internet online

Cargar SWF en modo binario en AIR y acceder a sus funciones o metodos

Citar            
MensajeEscrito el 11 Abr 2013 05:24 pm
Buen día amigos de cristalab! pues eso! tengo los bytes de un SWF cargados en un byteArray, y ese array se lo cargo a un loader con loadBytes, todo bien... una vez cargado en el loader puedo acceder a las propiedades del SWF como son versión del AS, la versión del SWF.. hasta las medidas del canvas del SWF, pero no puedo acceder a las funciones del mismo, la función a la que quiero acceder esta declarada como publica, al loader le establezco el loaderContext con el parámetro allowLoadBytesCodeExecution como true! pero aun así no accedo a las funciones! les pongo el código que hace esto:

Código :


var lc:LoaderContext = new LoaderContext();
lc.allowLoadBytesCodeExecution = true;
lc.allowCodeImport = true;
            
loadMovie = new Loader();
loadMovie.contentLoaderInfo.addEventListener(Event.COMPLETE, cargado);
loadMovie.loadBytes(bytes, lc); // bytes es el byteArray cargado con el SWF

private function cargado(evt:Event):void
{
trace(loadMovie.contentLoaderInfo.actionScriptVersion); //<-- Esta linea funciona! me devuelve los datos del SWF aqui verifico la version del AS y probe con AS2 Y AS3 y veo que coincide correctamente
loadMovie.content.prueba(); //prueba es la función publica a la que quiero acceder y esta en el SWF cargado en el byteArray y siempre se genera el error en esta linea!
         
}



Este codigo en especifico me devuelve el error: Error: Call to a possibly undefined method prueba through a reference with static type flash.display:DisplayObject.

Agradezco la ayuda que me puedan brindar!
Saludos y que tengan un buen día!

Por FlexUser

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Abr 2013 11:35 am
Creo que el evento cuando está el código disponible es Event.INIT (complete es cuando termina de cargar) Haz un cast a MovieClip de loadMovie.content por las dudas (loadMovie es un mal nombre ya que coincide con el nombre del método)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Abr 2013 09:21 pm
Gracias por tu respuesta! te comento que ya he intentado de esa manera, lo único que cambia es el tipo de error que se genera:

Código :

var lc:LoaderContext = new LoaderContext();

lc.allowLoadBytesCodeExecution = true;

lc.allowCodeImport = true;

            

cargarSWF = new Loader();

cargarSWF.contentLoaderInfo.addEventListener(Event.INIT, cargado);

cargarSWF.loadBytes(bytes, lc); // bytes es el byteArray cargado con el SWF



private function cargado(evt:Event):void

{

var elClip:MovieClip = cargarSWF.content as MovieClip;
elClip.prueba(); //Sigue dando error.

         

}


Al compilar genera el error: [Fault] exception, information=TypeError: Error #1009: Cannot access a property or method of a null object reference.

Te agradezco la ayuda!

Por FlexUser

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 24 Abr 2013 10:38 pm
import flash.display.Loader;
import flash.system.LoaderContext;
import flash.events.Event;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.display.MovieClip;
import flash.net.URLLoader;
import flash.display.DisplayObject;
import flash.system.ApplicationDomain;
import flash.net.URLLoaderDataFormat;


var bytes:ByteArray = new ByteArray();
var lc:LoaderContext = new LoaderContext(false,ApplicationDomain.currentDomain);
lc.allowLoadBytesCodeExecution = true;
lc.allowCodeImport = true;

var url:URLLoader = new URLLoader(new URLRequest("boxes.swf"));
url.dataFormat = URLLoaderDataFormat.BINARY;
url.addEventListener(Event.COMPLETE, function (e:Event){
var loader:Loader = new Loader();
loader.loadBytes(url.data,lc);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event){


var starship = loader.content["starship"];
stage.addChild(starship);
starship.test();


});


});



starship es un movieclip que se carga en pantalla con nombre de instancia starship y que está junto a otros elementos en boxes.swf.

test() es una función dentro de starship.

Si te sirve de algo, puedo pasarte el zip por privado para que veas que funciona.


Te puse la respuesta también en Foros del web... pero a lo mejor aquí te mejoran la solución.

Un saludo

Por Manuellama

12 de clabLevel



Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.