Загрузка изображений профиля на VK.com в ActionScript
У меня есть приложение iframe в vk.com. Я могу использовать их API, все выглядит хорошо, но когда я хочу загрузить изображения профиля, я получаю Security Sandbox Error. Когда я печатаю результат и ошибки, я получаю это: (Я использую Greensock ImageLoader)
MYURL: 'URL моего изображения на поддомене cs408919 в vk'
Загрузка CrossDomain на cs408919
ScriptAccessDenied: Ошибка № 2048
SecurityError: Ошибка № 2048
Ошибка: Ошибка № 2048
ScriptAccessDenied: Ошибка № 2123 Нарушение безопасности изолированной программной среды, нет доступа к файлам политики
Мне кажется, проблема crossdomain.xml, но я не смог найти подходящую. Спасибо...
2 ответа
Да, это междоменная проблема, поддомены vk для изображений не предоставляют crossdomain.xml
для пользовательских аватаров, но вы все еще можете загрузить (и добавить в список отображения) их. Что вы не можете сделать, так это получить доступ к загруженному контенту (и установить smooth
растровый флаг, например, или draw
дырка с изображениями на ней).
Если вам нужен доступ к контенту, вы можете использовать этот "взлом политики", но он взломан, поэтому его можно исправить в любом обновлении FP (думаю, даже этот ответ может приблизить этот момент:)):
Идея состоит в том, чтобы прослушать событие ADDED, если image Loader:
protected var _prepareloaderBitmap:Bitmap;
_prepareloader.addEventListener(Event.ADDED, onPrepareLoader);
_prepareloader.contentLoaderInfo.addEventListener(Event.COMPLETE, onPrepareLoader);
И слушатель:
protected function onPrepareLoader(event:Event):void
{
//event ADDED fired only for Bitmap (not for SWFs)
if(event.type == Event.ADDED)
{
_prepareloaderBitmap = event.target as Bitmap;
}
else if (event.type == Event.COMPLETE)
{
if(_prepareloaderBitmap)
{
trace("loaded image size:", _prepareloaderBitmap.width, "x", _prepareloaderBitmap.height);
}
}
}
Имея ссылку на загруженный Bitmap
Теперь вы можете добавить его вместо кросс-доменного загрузчика.
В дополнение к ответу fsbmain я хочу сказать, что вы должны добавить следующий код:
Security.allowDomain("*");