2011-05-18 10 views
7

Me gustaría leer la fuente de la clase flash.net.FileReference. es posible? ¿Dónde puedo encontrar los archivos fuente, vienen con Adobe Flash o Flash Builder?¿Es posible leer (y quizás cambiar) las fuentes de los archivos centrales de la clase Flash?

+4

¿Qué es lo que le gustaría cambiar? Recomiendo crear una clase personalizada que amplíe FileReference y anule las funciones que desea cambiar. – Corey

+0

Bueno, sí, su forma de hacerlo es definitivamente más limpia, pero ese no es el punto principal. ¿Puedo leerlos? ¿En cualquier sitio? – jayarjo

Respuesta

6

Para leer los archivos del paquete flash, puede encontrar el playerglobal.swc - cambie el nombre a playerglobal.zip y descomprima el paquete. Luego, descompile el archivo library.swf y obtenga los archivos de script. Esto es lo que encontré para FileReference:

//FileReference 
package flash.net 
{ 
    import flash.events.*; 
    import flash.utils.*; 

    public class FileReference extends flash.events.EventDispatcher 
    { 
     public function FileReference() 
     { 
      super(); 
      return; 
     } 

     public function upload(arg1:flash.net.URLRequest, arg2:String="Filedata", arg3:Boolean=false):void 
     { 
     } 

     private function _load(arg1:flash.utils.ByteArray):void 
     { 
     } 

     public function load():void 
     { 
      this._load(new ByteArray()); 
      return; 
     } 

     public function get size():uint 
     { 
     } 

     public function get type():String 
     { 
     } 

     public function browse(arg1:Array=null):Boolean 
     { 
     } 

     public function get name():String 
     { 
     } 

     public function get creator():String 
     { 
     } 

     public function get creationDate():Date 
     { 
     } 

     public function download(arg1:flash.net.URLRequest, arg2:String=null):void 
     { 
     } 

     public function get modificationDate():Date 
     { 
     } 

     public function get data():flash.utils.ByteArray 
     { 
     } 

     public function cancel():void 
     { 
     } 

     private function _save(arg1:flash.utils.ByteArray, arg2:String):void 
     { 
     } 

     public function save(arg1:*, arg2:String=null):void 
     { 
      var defaultFileName:String=null; 
      var data:*; 
      var d:flash.utils.ByteArray; 

      var loc1:*; 
      data = arg1; 
      defaultFileName = arg2; 
      d = new ByteArray(); 
      if (data == null) 
      { 
       throw new ArgumentError("data"); 
      } 
      if (data is String) 
      { 
       d.writeUTFBytes(data as String); 
      } 
      else if (data is XML) 
      { 
       d.writeUTFBytes((data as XML).toXMLString()); 
      } 
      else if (data is ByteArray) 
      { 
       d.writeBytes(data as ByteArray); 
      } 
      else 
      { 
       try 
       { 
        d.writeUTFBytes(data); 
       } 
       catch (e:Error) 
       { 
        throw new ArgumentError("data"); 
       } 
      } 
      d.position = 0; 
      if (defaultFileName == null) 
      { 
       defaultFileName = ""; 
      } 
      this._save(d, defaultFileName); 
      return; 
     } 
    } 
} 

I altamente no recomienda cambiar este archivo y más bien extenderla y anular las funciones que necesita modificar. De lo contrario, deberá volver a compilar library.swf y crear un playerglobal.swc personalizado.

+0

¿Qué significan esos métodos ficticios? ¿Es FileReference en realidad un ejemplo de una clase intrínseca, que podría no cambiarse? En realidad, me pregunto cómo el método upload() administra la transmisión directa, sin cargar el archivo en la memoria y tal vez imitarlo de alguna manera en mi aplicación. No me importa hacer algunos parches de mono si es posible lograr esto de alguna manera. – jayarjo

0

Cualquiera de las "cosas" que está disponible para usted para ver se encuentran (para Win7 de todos modos) en C:\Users\<your_user>\AppData\Local\Adobe\Flash CS4\en\Configuration

La porción Flash CS4 podría cambiar dependiendo de la versión que tiene. Las clases están en la carpeta Clases dentro de la configuración.

3

Como mencionan otros, puede ver las fuentes de las clases de marco de Flash y Flex. La ubicación exacta variará.

para Flash CS4 en Windows 7:

C:\Users\<your_user>\AppData\Local\Adobe\Flash CS4\en\Configuration

para Flex:

...\flex_sdk\frameworks\projects\framework\src

puede cambiar cualquiera fra clase de trabajo que desea siempre que tenga cuidado. En la nomenclatura Flash esto se conoce como Monkey Patching. Cree una clase en su proyecto con la misma estructura de paquete completo y nombre de clase que la clase de marco y el compilador encontrará y usará su clase personalizada en lugar de la clase de marco.

Hay algunas complicaciones al hacer esto con los marcos RSL. Para que ver aquí:

Cómo Mono Patch al utilizar Flex RSL

http://blogs.adobe.com/dloverin/2010/01/how_to_monkey_patch_when_using_flex_rsls.html

Esto no se aplica a las clases "intrínsecas" incorporados o. Éstos están incorporados en el reproductor y tendrán un código auxiliar en las ubicaciones de origen anteriores. En realidad no puedes cambiar las clases intrínsecas.

+0

Gracias por su perspicaz publicación - muy informativo. ¿Es la clase intrínseca FileReference entonces? – jayarjo

+2

@jayarjo, sí, FileReference es intrínseco, o al menos parcialmente intrínseco. Mira la fuente y verás que muchos de los métodos están vacíos. Eso es porque el código para ellos es código nativo proporcionado por el tiempo de ejecución. –

Cuestiones relacionadas