Flash (AS3) не любит метод рисования, но только когда SWF запускается на сервере? - PullRequest
0 голосов
/ 21 января 2010

У меня есть swf (AS3), который отлично работает локально, но когда я помещаю swf на сервер и запускаю его в браузере, он падает при попытке использовать метод draw:

var bmp:BitmapData=new BitmapData(ldr.width,ldr.height,true,0x00FFFFFF);
bmp.draw(ldr);

ldr - это загрузчик, который успешно загрузил jpg с другого сервера. Я могу добавить ldr на сцену и посмотреть изображение. Что происходит?

Ответы [ 2 ]

1 голос
/ 21 января 2010

Необходимо установить checkPolicyFile LoaderContext (второй (необязательный) аргумент метода load()) на true, чтобы получить доступ к bitmapData изображения, загруженного из удаленного домена.

var loader:Loader = new Loader();
var context:LoaderContext = new LoaderContext(true);
loader.load(urlRequest, context)

Доступ BitmapData

Когда вы загружаете изображение, используя метод load() класса Loader, вы можете указать параметр context, который является объектом LoaderContext. Если для свойства checkPolicyFile объекта LoaderContext задано значение true, проигрыватель Flash Player проверяет файл междоменной политики на сервере, с которого загружается изображение. Если существует файл междоменной политики, и этот файл разрешает домен загружаемого SWF-файла, файлу разрешается доступ к данным в объекте Bitmap; в противном случае доступ запрещен.

LoaderContext::checkPolicyFile

Установите для этого флага значение true, когда вы загружаете изображение (JPEG, GIF или PNG) из-за пределов собственного домена вызывающего SWF-файла и ожидаете, что вам потребуется доступ к содержимому этого изображения из ActionScript. Примеры доступа к содержимому изображения включают ссылку на свойство Loader.content для получения объекта Bitmap и вызов метода BitmapData.draw () для получения копии пикселей загруженного изображения. Если вы попытаетесь выполнить одну из этих операций без указания checkPolicyFile во время загрузки, вы можете получить исключение SecurityError, поскольку необходимый файл политики еще не загружен.

Loader::load()

Если загруженный контент является изображением, его данные не могут быть доступны из SWF-файла за пределами изолированной программной среды безопасности, если только домен этого SWF-файла не был включен в файл междоменной политики в исходном домене изображения.

BitmapData::draw()

Примечание: Исходный объект и (в случае объекта Sprite или MovieClip) все его дочерние объекты должны происходить из того же домена, что и вызывающая программа, или должны находиться в SWF-файл, который доступен вызывающей стороне, вызвав метод Security.allowDomain(). Если эти условия не выполняются, метод draw() ничего не рисует и выдает исключение SecurityError. Это ограничение не распространяется на содержимое AIR в изолированной программной среде безопасности приложения.

1 голос
/ 21 января 2010

Убедитесь, что файл crossdomain.xml на другом сервере указан правильно.

...