Страница 1 из 1

Не работает URLLoader - ошибка #2048

Добавлено: 10 фев 2011, 17:04
ragnarock
Загрузил свой swf в контакт без использования контейнера.
Изменил тестовое приложение со Вконтакта.
Пытаюсь достучаться до своего сайта:

Код: Выделить всё

         var variables:URLVariables = new URLVariables();        var obj:Object = new Object();        obj.folder = "Files";                 for (var item in obj)          {                             variables[item] = obj[item];         }                var request:URLRequest  = new URLRequest("http://*****.ru/scripts/dir.php?r=2");        request.method  = URLRequestMethod.POST;        request.data = variables;            //Создается запрос на урл в виде ?r=2&folder=Files         var loader:URLLoader = new URLLoader();        loader.dataFormat  = URLLoaderDataFormat.VARIABLES;                 loader.addEventListener(Event.COMPLETE, function (e:Event) {                                              tf.appendText(URLLoader(e.target).data.toString()); });        loader.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent) { tf.appendText("ioerror "+e.text); } );        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (e:SecurityErrorEvent) {                                             tf.appendText("security error"+e.text); } );        loader.load(request); 
При запуске с локального компа или при загрузке с сайта все работает (dir.php выдает список файлов).
При запуске из вконтакта получаю ошибку #2048: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]
Что я делаю не так?
Приложение уже почти дописано, там этот метод используется повсеместно и успешно.

Re: Не работает URLLoader - ошибка #2048

Добавлено: 10 фев 2011, 17:43
ragnarock
Пробовал написать Security.allowDomain("****.ru")

Нашел в html коде страницы Вконтакте:

Код: Выделить всё

proxy.addParam('allownetworking', [b]'all'[/b]);proxy.addParam('allowscriptaccess', [b]'samedomain'[/b]);proxy.addVariable('debug', '0');proxy.addVariable('lc_name', 'd567b214');proxy.write('flash_api_external'); var params = { allowfullscreen: "true", allownetworking: [b]"all"[/b], allowscriptaccess: [b]"never"[/b]};
См. выделенное жирным. Скорее всего это и влиет на незагрузку.
Но! Прошу заметить, что Sound.load() и Loader.load() (который flash.display.Loader) работают!
Что делать? Как это можно обойти?

Re: Не работает URLLoader - ошибка #2048

Добавлено: 10 фев 2011, 20:27
ragnarock
Разобрался наконец!

Кросс-доменная политика. Странно, что на этом форуме так кратко о ней рассказано.

Для того чтобы осуществлять загрузку файлов с другого сервера, на нем надо разместить xml-файл с разрешением к доступу.

Этот файл следующего содержания.

Код: Выделить всё

 <?xml version="1.0"?><!DOCTYPE cross-domain-policy   SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy>    <allow-access-from domain="*" to-ports="*"/></cross-domain-policy> 
В нем разрешено для всех вызовов.

Можно сделать более конкретно:

Код: Выделить всё

<cross-domain-policy><allow-access-from domain="www.vkontakte.ru" /><allow-access-from domain="http://www.vkontakte.ru" /><allow-access-from domain="http://vkontakte.ru" /><allow-access-from domain="*.vkontakte.ru" /></cross-domain-policy> 
Далее в инициализации приложения (AS3) надо разместить строчку:

Код: Выделить всё

 import flash.system... ... init(e:Event){Security.loadPolicyFile("*****.ru/crossdomain.xml");...} 
И, все запросы работают!