swf que programa para extension como chrome archivos abrir actionscript-3 actionscript flash external

actionscript 3 - que - Clase de creación de instancias AS3 desde SWF externo



swf download (5)

Por lo tanto, parece que no puede hacer una instancia de una clase a menos que se cumpla dentro del SWF del proyecto.

Pruebe la clase ModuleLoader . Vea este artículo sobre cómo crear módulos.

Estaba hablando con mi amigo sobre esto, está convencido de que puedes hacer esto y dice que lo ha hecho, pero no puedo hacer que esto funcione.

Me pregunto si es posible. Traté de escribir una var como clase que está dentro del archivo SWF descargado externamente y luego crear una instancia pero no puedo hacerlo.

algún código

private static function onCompleteHandler(e:Event) {
dashboardObject = e.target.content;
// registerClassAlias("Dashboard", ); doesnt work
var dash:Class = getDefinitionByName("Dashboard") as Class;
var myDash = new dash();
trace(myDash.show);
}

Error

ReferenceError: Error #1065: Variable Dashboard is not defined.
at global/flash.utils::getDefinitionByName()
at System$/onCompleteHandler()

Por lo tanto, parece que no puede hacer una instancia de una clase a menos que se cumpla dentro del SWF del proyecto. Lo cual si es cierto es lo que quiero que haga. No quiero que la gente intente crear instancias de mis clases simplemente descargando el archivo SWF para lo que estoy creando aquí.

Gracias


Tienes que hacer dos cosas:

  1. Proporcione a Dashboard un paquete ( package.to.Dashboard ). Las clases sin paquete tienen diferentes atributos (un espacio de nombre protegido) en forma compilada que aquellos con paquetes, lo que los hace inaccesibles para archivos SWF externos.
  2. Asegúrese de que su SWF cargado esté cargado en el mismo ApplicationDomain que el padre

Debería poder usar getDefinitionByName del getDefinitionByName SWF cargado y la Class return.


Recomiendo usar CASALib para esto. Creé una aplicación completa en la que no conocía los nombres de las clases hasta el tiempo de ejecución. Acabo de crear algunas interfaces para garantizar que las funciones más importantes estuvieran siempre disponibles. La utilidad CASALib llamada LibraryManager tiene una función para instanciar una clase desde un SWF externo.


var loader:Loader = new Loader(); var req:URLRequest = new URLRequest("foo.swf"); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fooLoadComplete); loader.load(req); function fooLoadComplete(e:Event):void { var ClassDefinition:Class = e.target.applicationDomain.getDefinition("Symbol1") as Class; var sym1:MovieClip = new ClassDefinition(); this.addChild(sym1); }


Es posible que desee hacer esto:

var dash:Class = Loader(e.target).contentLoaderInfo .applicationDomain.getDefinition("Dashboard") as Class;

getDefinitionByName() funciona para las clases cargadas por el swf actual, no las swfs externas. Para swf externo necesita dar la referencia del objeto cargador que realmente cargó el swf particular.

Además, si estás haciendo esto en FlashBuilder, asegúrate de que la "aplicación principal" en el SWF que estás cargando sea un Sprite (o posiblemente un MovieClip, aunque no lo haya probado), no una Aplicación (como tú obtener el archivo MXML predeterminado creado para un nuevo proyecto SWF). De lo contrario, el código anterior no podrá encontrar la definición de clase que está buscando.