Можно ли прочитать (и, возможно, изменить) исходные файлы основных классов Flash? - PullRequest
7 голосов
/ 18 мая 2011

Я хотел бы прочитать источник класса flash.net.FileReference.Это возможно?Где я могу найти исходные файлы, они поставляются с Adobe Flash или Flash Builder?

Ответы [ 3 ]

6 голосов
/ 18 мая 2011

Чтобы прочитать файлы пакета flash, вы можете найти playerglobal.swc - измените имя на playerglobal.zip и разархивируйте пакет.Затем декомпилируйте файл library.swf и получите файлы сценариев.Вот что я нашел для 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;
        }
    }
}

Я настоятельно рекомендую не изменять этот файл, а расширить его и переопределить функции, которые необходимо изменить.В противном случае вам нужно будет перекомпилировать файл library.swf и создать собственный playerglobal.swc.

3 голосов
/ 18 мая 2011

Как уже упоминалось, вы можете увидеть исходные коды для классов Flash и Flex Framework.Точное местоположение будет различным.

Для Flash CS4 в Windows 7:

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

Для Flex:

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

Вы МОЖЕТЕ изменить любой класс каркаса, который хотите , если будете осторожны.В номенклатуре Flash это называется Monkey Patching.Создайте класс в своем проекте с такой же полной структурой пакета и именем класса, что и у класса фреймворка, и компилятор найдет и использует ваш пользовательский класс вместо класса фреймворка.

Существуют некоторые сложности при выполнении этого с помощью базовых RSL.Об этом см. Здесь:

Как использовать Monkey Patch при использовании Flex RSL

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

Это не относится к встроенным иливнутренние "классы"Они встроены в плеер и будут иметь код заглушки в указанных выше исходных местах.Вы не можете изменить внутренние классы.

0 голосов
/ 18 мая 2011

Любой из «материалов», доступных для просмотра, находится (в любом случае для Win7) в C:\Users\<your_user>\AppData\Local\Adobe\Flash CS4\en\Configuration

Часть Flash CS4 может меняться в зависимости от имеющейся версии. Классы находятся в папке Classes внутри конфигурации.

...