PDA

Просмотр полной версии : [Вконтакте] Опять кроссдоменник. Проблема с URLLoader


goodguy
14.04.2011, 14:49
Получаю необходимые данные от контакта и перенаправляю на свой сервак.
Вот метод делающий запрос к серверу:

private function getBalance():void {
if (!this._auth_key || !this._viewer_id) return;

var request:URLRequest = new URLRequest(Globals.FUNDS_URL);
request.method = URLRequestMethod.POST;
var variables:URLVariables = new URLVariables();
variables.auth_key = this._auth_key;
variables.viewer_id = this._viewer_id;
request.data = variables;

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, onBalanceReturn, false, 0, true);
try {
loader.load(request);
} catch (e:Error) {
trace(e.message);
}
}



Все просто.
Но при запуске из контакте, выдает такую ошибку:

Error #2044: Необработанный securityError:. text=Error #2048: Нарушение изолированной среды: http://cs5699.vkontakte.ru/u5495786/ae7cea2f07bc49.zip?_stV= не может загрузить данные из http://warfarex.com/funds.php.
at vk::KontaktConnector/getBalance()[C:\Users\Konstantin\Flash\WarfareX\src\vk\KontaktConnector.as:66]
at vk::KontaktConnector()[C:\Users\Konstantin\Flash\WarfareX\src\vk\KontaktConnector.as:51]
at Setup/begin()[C:\Users\Konstantin\Flash\WarfareX\src\Setup.as:51]
at Setup()[C:\Users\Konstantin\Flash\WarfareX\src\Setup.as:35]


Суть понятна, нет разрешения. Но как его сделать? В корень сервера warfarex.com положил кроссдоменник, разрешающий доступ с любых доменов. Результат нулевой.
В конструкторе главного класса написал это:

Security.allowDomain("warfarex.com");
Security.loadPolicyFile(Globals.ROOT_URL + "crossdomain.xml");

Так же результат нулевой.

Раньше при загрузке другой swf использовал контекст загрузки:
var context:LoaderContext = new LoaderContext();
if (Security.sandboxType != 'localTrusted') context.securityDomain = SecurityDomain.currentDomain;

context.applicationDomain = ApplicationDomain.currentDomain;
и добавлял его как параметр к методу load() класса Loader. Но у URLLoader.load() такого параметра нет.

Как обойти эту проблему?

Добавлено через 24 минуты
Блин. Дело в кэше фаерфокса. Все хелпы перерыл, а оказалось все было нормально, просто грузился старый файл...

carrotoff
14.04.2011, 23:09
Кэш во время отладки может довести человека до нервного срыва)

Советую на время отладки к параметрам запроса отправлять еще случайный параметр, дабы получить уникальный URL


..
variables['rnd'] = new Date().getTime();
request.data = variables;


И еще: по-моему, метод
Security.allowDomain("warfarex.com");
должен вызываться для загружаемого объекта, чтобы допустить его загрузку с другого домена, соответственно его вызов из конструктора главного класса объекта, который собирается что-либо в себя загружать, бесполезен.

goodguy
15.04.2011, 07:17
должен вызываться для загружаемого объекта, чтобы допустить его загрузку с другого домена, соответственно его вызов из конструктора главного класса объекта, который собирается что-либо в себя загружать, бесполезен.
Знаю, но это было уже на грани взрыва мозга, так сказать, а вдруг :D

carrotoff
15.04.2011, 11:05
Очень знакомые симптомы) я и говорю, что кэш во время отладки может свести человека с ума)

2Sun
15.04.2011, 18:36
Мне вот этот вариант понравился больше - (http://www.flasher.ru/forum/showthread.php?p=800092)
crossdomain будет работать только если приложение лежит на сервере ВК. Для iFrame ВК должен дать разрешение на доступ к контенту, для этого в crossdomain.xml должен быть прописан ВАШ сервер , а этого ВК делать не будет. Читайте ссылу - там все подробно описано. Другого пути как бы нет. (точнее есть - через ПХП сохранять пикчер к себе на сервак и потом его грузить - но это ИМХО - маразм.

goodguy
15.04.2011, 18:40
Да читал я это уже давно ) Заведомо неудачное решение. Дыру залатают, прийдется переписвать кучу кода. И не важно кому какой вариант больше нравится
crossdomain будет работать только если приложение лежит на сервере ВК
У меня приложение лежит на собственном серваке. В контакте только загрузчик, и все работает ;)

2Sun
15.04.2011, 20:09
Это и называется - на сервере ВК.
А загрузчик или все приложение - разницы ноль. как пеерведут все приложения на iFrame - прийдется переписать кучу кода. 8-)
И будет не важно, что вам это было удобно. А дыру если не залатали за сколько лет - то вряд-ли залатают.

goodguy
15.04.2011, 20:12
Тема исчерпана. Хватит офтопить тут.
как пеерведут все приложения на iFrame
этого точно не будет.

carrotoff
27.05.2011, 23:19
Блин, сейчас проверял работу в разных браузерах, и батц - та же проблема! чуть с ума не сошел, не понимал откуда секьюрити эррор!

Вспомнил, эту тему, посмотрел браузер (Firefox detected), открыл хромом, всё ок!
Лиса закэшировала старый(!!!) кроссдоменник!

Вот беда-перда! за что так firefox издевается над нами?)