Можно ли перехватывать и редактировать загрузки SWF в удаленном SWF? - PullRequest
0 голосов
/ 04 июля 2011

Поскольку у меня есть некоторые проблемы с песочницей, я ищу небольшой обходной путь, который должен работать для проксификации ресурсов, загруженных удаленным SWF.

В настоящее время после загрузки удаленного SWF-файла и попытки нарисовать растровое изображение я получаю следующую ошибку:

Security sandbox violation: BitmapData.draw: http://urlhere cannot access http://remotehost/clothes/bg/bg_10438411_bg.swf. This may be worked around by calling Security.allowDomain.

Теперь я хочу посмотреть, возможно ли поймать и изменить SWF, который загружает удаленный SWF. Так что я могу загрузить их через файл php, а затем вместо этого в SWF. В основном редактирование URL, с которого он загружает SWF. Есть предложения?

1 Ответ

0 голосов
/ 14 июля 2011

Похоже, вы пытаетесь нарисовать снимок загруженного SWF с помощью BitmapData.draw ().Вам потребуется либо файл crossdomain.xml на сервере, содержащий загружаемый SWF-файл, либо прокси-сервер через сценарий на стороне сервера.

Если у вас есть файл crossdomain.xml, вы можете использовать pass LoaderContext в качестве второго параметра метода Loader load () , явно запрашивая проверку междомена.Если требования безопасности не выполнены, будет отправлено SecurityErrorEvent .Кроме того, вы должны перехватить SecurityError , генерируемое при вызове метода draw () BitmapData, и использовать URL-адрес loaderInfo, чтобы изменить его и использовать его, как вам удобно:

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityError);
loader.load(new URLRequest('yoursite.com/yourfile.swf'),new LoaderContext(true));

function completeHandler(event:Event):void{
    var clone:BitmapData = new BitmapData(1,1);//create a small bitmap to try and draw into
    try{//draw the contents
        clone.draw(event.target.content);
    }catch(error:SecurityError){//expect security error
        trace('SecurityError while loading',event.target.url,'details\n',error.message);    
    }
}
function securityError(event:SecurityErrorEvent):void{
    trace(event.target.url,event);
}

Вы также можете добавитьпрослушиватели IOErrorEvent и HTTPStatusEvent, на случай, если что-то пойдет не так (файл отсутствует, неправильный URL и т. д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...