Давно не виделись
У меня вот такая странная проблема:
У меня есть флешка, использующая google maps api. Мне потребовалось снять с нее скриншот таким образом, чтобы можно было получить к нему оступ из яваскрипта страницы.
Выглядит, естественно, примерно так:

Код AS3:
//этот метод будет вызывать яваскрипт.
//возвращает изображение в base64
function getEncodedScreenshot():String
{
var w:Number = stage.stageWidth;
var h:Number = stage.stageWidth;
var screenshotData:BitmapData = new BitmapData(w, h);
screenshotData.draw(stage);
return Base64.encodeByteArray( PNGEncoder.encode(screenshotData));
}
// создаем коллбек для внешнего интефрейса
try
{
ExternalInterface.addCallback('getScreenshot',getEncodedScreenshot);
}
catch(e:Error)
{
//среда не поддерживает внешний интерфейс. Например, запуск вне браузера
}
Все нормально, метод сам по себе нормально работает, но проблемы начинаются при доступе через внешний интерфейс.
Если на странице вызвать

Код:
myFlashElement.getScreenshot()
, то консоль хрома выдает сообщение

Код:
Uncaught Error: Error calling method on NPObject.
(anonymous function)
В фаерфоксе выглядит вот так:

Код:
"Error in Actionscript. Use a try/catch block to find error."
Флешка вставлена через SWFObject, плеер десятый. Параметр allowscriptaccess стоит в значении "always".
Попробовал на всякий Security.AllowDomain("*") - не помогло. Из шизофреничных соображений попробовал также явно указать домены - тоже не помогло.
Подскажите, пожалуйста, в чем может быть проблема :-\
Добавлено через 5 минут
Локально, кстати, тоже не работает
Добавлено через 2 часа 56 минут
А вот интересно... если не опубликовывать с помощью SWFObject, а запустить обычный тест в браузере при публикации, то все работает. Неужели проблема из-за публикации с помощью SWFObject?
Добавлено через 3 часа 12 минут
Ух ты ж блин, заметил, что у меня не дебаговый плеер стоит.
Поставил дебаговый и получил замечательное сообщение:

Код:
SecurityError: Error #2122: Нарушение изолированной среды: BitmapData.draw: http://127.0.0.1:8000/i/flash/card_location.swf?ver=1.0.2 не может осуществить доступ к http://mt0.google.com/vt/lyrs=m@148&hl=ru&src=api&x=0&y=0&zoom=16&s=. Необходим файл политики, но, когда были загружены эти мультимедийные данные, флаг checkPolicyFile не был установлен.
at flash.display::BitmapData/draw()
at location_fla::Main/getEncodedScreenshot()
at Function/http://adobe.com/AS3/2006/builtin::apply()
at flash.external::ExternalInterface$/_callIn()
at Function/<anonymous>()
Эээ, то есть если в кадре были загруженные с другого домена, то я не могу их отрисовать в BitmapData? Но я же загрузить-то как-то их смог через апи, значит, с кросдоменной политикой все должно быть в порядке.