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

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)

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

Сообщение ragnarock » 10 фев 2011, 17:04

Загрузил свой swf в контакт без использования контейнера.
Изменил тестовое приложение со Вконтакта.
Пытаюсь достучаться до своего сайта:
  1.  
  2.         var variables:URLVariables = new URLVariables();
  3.         var obj:Object = new Object();
  4.         obj.folder = "Files";
  5.        
  6.          for (var item in obj)
  7.          {                
  8.              variables[item] = obj[item];
  9.          }
  10.        
  11.         var request:URLRequest  = new URLRequest("http://*****.ru/scripts/dir.php?r=2");
  12.         request.method  = URLRequestMethod.POST;
  13.         request.data = variables;
  14.  
  15.            //Создается запрос на урл в виде ?r=2&folder=Files
  16.  
  17.         var loader:URLLoader = new URLLoader();
  18.         loader.dataFormat  = URLLoaderDataFormat.VARIABLES;        
  19.         loader.addEventListener(Event.COMPLETE, function (e:Event) {
  20.                                              tf.appendText(URLLoader(e.target).data.toString()); });
  21.         loader.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent) { tf.appendText("ioerror "+e.text); } );
  22.         loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (e:SecurityErrorEvent) {
  23.                                             tf.appendText("security error"+e.text); } );
  24.         loader.load(request);
  25.  


При запуске с локального компа или при загрузке с сайта все работает (dir.php выдает список файлов).
При запуске из вконтакта получаю ошибку #2048: [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]
Что я делаю не так?
Приложение уже почти дописано, там этот метод используется повсеместно и успешно.
ragnarock

 
Автор темы
Сообщения: 3
Зарегистрирован: 10 фев 2011, 15:24
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение ragnarock » 10 фев 2011, 17:43

Пробовал написать Security.allowDomain("****.ru")

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

  1. proxy.addParam('allownetworking', [b]'all'[/b]);
  2. proxy.addParam('allowscriptaccess', [b]'samedomain'[/b]);
  3. proxy.addVariable('debug', '0');
  4. proxy.addVariable('lc_name', 'd567b214');
  5. proxy.write('flash_api_external');
  6.  
  7. var params = {
  8.  allowfullscreen: "true",
  9.  allownetworking: [b]"all"[/b],
  10.  allowscriptaccess: [b]"never"[/b]
  11. };


См. выделенное жирным. Скорее всего это и влиет на незагрузку.
Но! Прошу заметить, что Sound.load() и Loader.load() (который flash.display.Loader) работают!
Что делать? Как это можно обойти?
ragnarock

 
Автор темы
Сообщения: 3
Зарегистрирован: 10 фев 2011, 15:24
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

Сообщение ragnarock » 10 фев 2011, 20:27

Разобрался наконец!

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

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

Этот файл следующего содержания.
  1.  
  2. <?xml version="1.0"?>
  3. <!DOCTYPE cross-domain-policy
  4.   SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
  5. <cross-domain-policy>
  6.     <allow-access-from domain="*" to-ports="*"/>
  7. </cross-domain-policy>
  8.  


В нем разрешено для всех вызовов.

Можно сделать более конкретно:
  1. <cross-domain-policy>
  2. <allow-access-from domain="www.vkontakte.ru" />
  3. <allow-access-from domain="http://www.vkontakte.ru" />
  4. <allow-access-from domain="http://vkontakte.ru" />
  5. <allow-access-from domain="*.vkontakte.ru" />
  6. </cross-domain-policy>


Далее в инициализации приложения (AS3) надо разместить строчку:
  1.  
  2. import flash.system...
  3.  
  4. ... init(e:Event)
  5. {
  6. Security.loadPolicyFile("*****.ru/crossdomain.xml");
  7. ...
  8. }
  9.  


И, все запросы работают!
ragnarock

 
Автор темы
Сообщения: 3
Зарегистрирован: 10 фев 2011, 15:24
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.


Вернуться в Создание Flash-приложений ВКонтакте



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0