Если вам разрешено загружать данные из соответствующего домена, выполните следующие действия:
- загрузите SWF-файл как двоичные данные, используя URLLoader и URLLoaderDataFormat.BINARY
- загрузите двоичный контентв экранный объект, используя Loader и loadBytes ()
. После этого вы сможете draw()
содержимое этого swf.
EDIT Пример этой техники.
Просто скопируйте и вставьте приведенный ниже код в пустой файл fla, скомпилируйте и поместите полученный SWF-файл где-нибудь поверх http (при локальном тестировании оба вызова draw () будут успешными, поэтому вы не увидите разницу).
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.events.Event;
import flash.utils.ByteArray;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.system.Security;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.text.TextField;
import flash.display.StageScaleMode;
var onBinaryComplete:Function = function (event:Event) : void
{
trace("onBinaryComplete()");
var loader:URLLoader = event.target as URLLoader;
var bytes:ByteArray = loader.data as ByteArray;
trace(bytes.length+" bytes");
bytesLoader.loadBytes(bytes);
}
var onBytesComplete:Function = function (event:Event) : void
{
trace("onBytesComplete()");
var info:LoaderInfo = event.target as LoaderInfo;
var bmp:BitmapData = new BitmapData(300, 300, true, 0x8000FF00);
// this will not fail, you'll see an image
bmp.draw(info.content);
var bitmap = new Bitmap(bmp);
bitmap.x += 100;
bitmap.y += 100;
stage.addChild(bitmap);
}
var onDirectLoadComplete:Function = function (event:Event) : void
{
trace("onDirectLoadComplete()");
var bmp:BitmapData = new BitmapData(300, 300, true, 0x80FF0000);
// this must fail, you'll get an exception
bmp.draw(event.target.content);
stage.addChild(new Bitmap(bmp));
}
var binaryLoader:URLLoader = new URLLoader();
binaryLoader.dataFormat = URLLoaderDataFormat.BINARY;
binaryLoader.addEventListener(Event.COMPLETE, onBinaryComplete);
binaryLoader.load(new URLRequest("http://noregret.org/test/wrk.swf"));
var bytesLoader:Loader = new Loader();
bytesLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onBytesComplete);
var directLoader:Loader = new Loader();
directLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onDirectLoadComplete);
directLoader.load(new URLRequest("http://noregret.org/test/wrk.swf"));
Загрузка данных crossdomain.xml: http://noregret.org/crossdomain.xml,, но вы не можете контролировать загруженный SWF-контент при его прямой загрузке.Загрузка байтов, а затем содержимое решает проблему.