Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.02.2010, 19:30
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 1  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
По умолчанию 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. Сам протестить это не могу, так как ошибка безопасности не дает мне дойти до этого момента.

Старый 17.02.2010, 19:49
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Грузите второй swf в изолированную среду загружающего (того, который на ВКонтакте находится).

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

Старый 17.02.2010, 19:57
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 3  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Цитата:
Сообщение от udaaff Посмотреть сообщение
Грузите второй swf в изолированную среду загружающего (того, который на ВКонтакте находится).
вы имеете ввиду в ихний флэш-контейнер? Если нет, то можно поподробнее пожалуйсто, ато даже представления не имею.

Старый 17.02.2010, 20:04
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
SecurityDomain#currentDomain

Старый 17.02.2010, 20:10
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 5  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Это надо в кроссдомейне прописывать или в коде? Попробовал воспользоваться поиском и не нашел, как этим пользоваться...
Если вас не затруднить, можно еще более подробней?

Старый 17.02.2010, 20:15
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код 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);

Старый 17.02.2010, 22:00
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 7  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Большое спасибо за Ваши советы, обязательно попробую когда опять доберусь до флэша, надеюсь поможет. Если что отпишусь

Старый 18.04.2010, 23:32
master_alexande вне форума Посмотреть профиль Отправить личное сообщение для master_alexande Найти все сообщения от master_alexande
  № 8  
Ответить с цитированием
master_alexande

Регистрация: Apr 2010
Сообщений: 3
Простите за тупость но что нужно еще прописать во флеше или на сервере, что бы заработал этот прелоадер(((

Код 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.

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

Старый 19.04.2010, 10:47
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 9  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Cвойство LoaderContext.securityDomain можно использовать только если вы выложили свф на домен. Если тестите приложение с рабочего стола, надо просто:
Код AS3:
ldr.load(urlReq);

Старый 19.04.2010, 10:55
master_alexande вне форума Посмотреть профиль Отправить личное сообщение для master_alexande Найти все сообщения от master_alexande
  № 10  
Ответить с цитированием
master_alexande

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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