Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   SecurityError`ы при загрузке swf с другого сервера (http://www.flasher.ru/forum/showthread.php?t=136461)

Furinax 17.02.2010 19:30

SecurityError`ы при загрузке swf с другого сервера
 
Всем добрый день. При использовании АПИ Вконтакте столкнулся с новой для меня проблемой, хотелось бы узнать как её решили те кто разбираются лучше меня.

Проблема в следующем.
У меня есть swf, получающий данные с вконтакта, а затем основываясь на полученных данных делает запрос к стороннему серверу и получает данные оттуда. Если залить этот swf на вконтакте и запускать оттуда, то все работает как надо. Но ввиду того, что файл весит больше 1 мб, я решил загружать его через прелоудер. Написал свой прелоудер, протестировал, работает тоже как надо. Далее заливаю прелоудер на вконтакте, и он загружает описанный выше swf-файл с удаленного сервера. В прелоудере прописал Security.allowDomain("адрес сервера"), так как загружаемый swf-файл обращается к сцене. Теперь вроде бы все должно работать, но не работает. Security Error (номер не помню) и пишет, что загружаемый swf-файл не может сделать запрос к АПИ вконтакте. В корень удаленного сервера закинул кроссдомейн, но все равно не помогает.

Вот код запроса из загружаемого swf-файла.
Код AS3:

private function loadDataFromVK():void {
                        var loader1:URLLoader = new URLLoader();
                        var variablesToSend:URLVariables = new URLVariables();
                        var viewerID:String = root.loaderInfo.parameters.viewer_id;
 
                        var apiID:String = "1715580";
                        var secretKey:String = "csu8CqrlFD";
                        var methodFromAPI:String = "getProfiles";
 
                        variablesToSend.api_id = apiID;
                        variablesToSend.sig = MD5.hash(viewerID + 'api_id=' + apiID + 'fields=first_name,last_name,sex' + 'method=' + methodFromAPI + 'uids=' + viewerID + 'v=2.0' + secretKey);
                        variablesToSend.v = "2.0";
                        variablesToSend.fields = "first_name,last_name,sex";
                        variablesToSend.uids = viewerID;
                        variablesToSend.method = methodFromAPI;
 
                        loader1.addEventListener(Event.COMPLETE, onLoadDataFromVK);
 
                        uId = viewerID;
 
                        CommonFunctions.sendData(variablesToSend, loader1, "http://api.vkontakte.ru/api.php");
                };

Еще хотелось бы заодно узнать про root.loaderInfo.parameters.viewer_id. Если swf-файл загружен через прелоудер, то данная строка обращается к корню прелоудера или же надо parent.root.loaderInfo.parameters.viewer_id. Сам протестить это не могу, так как ошибка безопасности не дает мне дойти до этого момента.

udaaff 17.02.2010 19:49

Грузите второй swf в изолированную среду загружающего (того, который на ВКонтакте находится).

Цитата:

Еще хотелось бы заодно узнать про root.loaderInfo.parameters.viewer_id. Если swf-файл загружен через прелоудер, то данная строка обращается к корню прелоудера или же надо parent.root.loaderInfo.parameters.viewer_id. Сам протестить это не могу, так как ошибка безопасности не дает мне дойти до этого момента.
Код AS3:

stage.loaderInfo.parameters

не ошибетесь.

Furinax 17.02.2010 19:57

Цитата:

Сообщение от udaaff (Сообщение 887379)
Грузите второй swf в изолированную среду загружающего (того, который на ВКонтакте находится).

вы имеете ввиду в ихний флэш-контейнер? Если нет, то можно поподробнее пожалуйсто, ато даже представления не имею.

udaaff 17.02.2010 20:04

SecurityDomain#currentDomain

Furinax 17.02.2010 20:10

Это надо в кроссдомейне прописывать или в коде? Попробовал воспользоваться поиском и не нашел, как этим пользоваться...
Если вас не затруднить, можно еще более подробней?

udaaff 17.02.2010 20:15

Код AS3:

var loader:Loader = new Loader();
var loaderContext:LoaderContext = new LoaderContext(false,
                        ApplicationDomain.currentDomain, SecurityDomain.currentDomain);
var request:URLRequest = new URLRequest("asdf");
 
loader.load(request, loaderContext);


Furinax 17.02.2010 22:00

Большое спасибо за Ваши советы, обязательно попробую когда опять доберусь до флэша, надеюсь поможет. Если что отпишусь :rolleyes:

master_alexande 18.04.2010 23:32

Простите за тупость но что нужно еще прописать во флеше или на сервере, что бы заработал этот прелоадер(((

Код AS3:

public function preload():void
                {
 
 
 
                        var context:LoaderContext = new LoaderContext();
                        context.securityDomain = SecurityDomain.currentDomain;
                        context.applicationDomain = ApplicationDomain.currentDomain;
                        var urlReq:URLRequest = new URLRequest("http://[domain]/1.swf");
                        var ldr:Loader = new Loader();
                        ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,done);
                        ldr.load(urlReq,context);
 
                }
                private function done(e:Event):void
                {
                        var container=e.target.content;
                        addChildAt(container,0);
                        allert_area.text="complete";
 
                }

Это код моего прелоадера...
При компиляции пишет SecurityError: Error #2142: Нарушение изолированной среды: локальные SWF-файлы не могут использовать свойство LoaderContext.securityDomain.

Помогите пожалуйста, буду ооочень признателен

Furinax 19.04.2010 10:47

Cвойство LoaderContext.securityDomain можно использовать только если вы выложили свф на домен. Если тестите приложение с рабочего стола, надо просто:
Код AS3:

ldr.load(urlReq);


master_alexande 19.04.2010 10:55

В том то и дело... Загружаемое приложение лежит на сторонем сервере http://[domain]/1.swf
Прописал контекст для лоадера, прописал аллоуДомаин в загружаемой флешке... и ничего не происходит((
Если пытаюсь протестировать при компиляции выдает SecurityError: Error #2142:
Если просто компилю выкладываю на 3й сервер, просто черный экран...
По событиям отследил, что срабатывает Ивент.Опен ... Так же к серверу где лежит загружаемая флешка идет обращение на кроссдомаин и больше ничего(((


Часовой пояс GMT +4, время: 07:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.