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

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.06.2014, 01:36
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 1  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Cool Передача данных из приложения Air в Swf через LocalConnection

Ниже код для приложения Air (Sender.fla):
Код AS3:
var lc:LocalConnection = new LocalConnection();
lc.send("_myConn", "syncAllItems", "Hello world!");
Далее код для обычного файла SWF (Reseiver.fla):
Код AS3:
var localConnection:LocalConnection = new LocalConnection();
localConnection.allowDomain("*");
localConnection.client = this;
localConnection.connect("_myConn");
 
//
function syncAllItems(t:String):void
{
	my_txt.text = t;
}
Проблема в том, что при тестировании внутри флеша, все работает хорошо, как работает хорошо, если первый файл публикуется в SWF, а не Air Installer. Если же пробуем запускать все локально (нужно именно локальное взаимодействие в рамках одного ПК), то файл SWF выдает ошибку:
Error #2044: Unhandled SecurityErrorEvent:. text=Error #2047: Security sandbox violation: LocalConnection.send: app#Sender cannot access file:///Users/volcanoflash/Dropbox/Reseiver.swf.

Оба файла при этом лежат в одной директории... Опробовано и на Mac и на Win.

Помогите советом, коллеги!

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Вот тут надо добавить эту директорию в список доверенных
__________________
Ко мне можно и нужно обращаться на ты)

Старый 10.06.2014, 12:06
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 3  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Спасибо огромное. Я убил кучу времени, пытаясь понять в чем заговздка.

Старый 10.06.2014, 12:18
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Но это если нужно только для своего компа. Заставлять юзеров делать это не вариант.
__________________
Ко мне можно и нужно обращаться на ты)

Старый 10.06.2014, 13:51
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 5  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
А подскажите еще, что нужно, чтобы избежать этой проблемы: надежный сертификат разработчика? или что-то другое? Иначе выходит, что LocalConnection между Air и Swf в принципе не возможен...

Старый 11.06.2014, 01:17
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 6  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
Если у вас первое приложение именно AIR, то можно смотреть в сторону ServerSocket:
http://help.adobe.com/en_US/FlashPla...verSocket.html

Старый 18.02.2015, 01:03
SpetZ_Naz вне форума Посмотреть профиль Отправить личное сообщение для SpetZ_Naz Найти все сообщения от SpetZ_Naz
  № 7  
Ответить с цитированием
SpetZ_Naz

Регистрация: Aug 2012
Сообщений: 77
Хотелось бы приподнять данную тему дабы новую не открывать.

Столкнулся с такой же проблемой. Создал локальное приложение AIR (Флеш) - грузит в себя флешку через Loader и добавляет его на сцену (все ОК, грузит). Загружаемая в AIR флешка создана мною как Web приложение написанное на Flex. Теперь из AIR приложения в загруженную SWF нужно передать параметр (текст или массив), обработать его там и вывести в этой же флешке результат.

Для чего мне это нужно. В AIR (Флеш) нет компонента Tree (древовидное отображение массива). А мне он нужен. К сожалению не разобрался как воспользоваться сторонними реализациями Tree компонента под флеш, поэтому решил попробовать подгрузить Flex флешку.

Воспользовался LocalConnection для связи AIR с SWF. Если не вгружать SWF в AIR, то все работает, параметр передается, связь удачна. Проблемы начинаются с загрузкой swf в AIR

В общем код AIR который делает запрос в загруженный swf:

Код AS3:
//обработчик события нажатия на кнопку, что грузит swf-файл
 
// глобальная область объявления переменных
private var loader:Loader;
private var lc:LocalConnection; 
 
private function on_statButton_ButtonMouseCLICK_Handler(event:MouseEvent):void
{
      loader = new Loader();
      var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
 
      // пробовал и так: 
      // context.securityDomain = Security.sandboxType == Security.REMOTE ? SecurityDomain.currentDomain : null;
 
      myrequest = new URLRequest('treeView_folder\\treeW.swf');
      loader.load(myrequest, context);
 
      loader.x = 70;
      loader.y = 100;
 
      myForm.addChild(loader);
 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLICompleteHandler);
}
 
protected function onLICompleteHandler(event:Event):void
		{
			loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLICompleteHandler);
			lc = new LocalConnection();
			lc.addEventListener(StatusEvent.STATUS, onLCSTATUS_Handler);
			lc.send('app#myApp.tech:_treeConnection', '_setParam', 'параметр передан, успех');
			trace(lc.domain);  // выдает -->  app#myApp.tech
		}
 
protected function onLCSTATUS_Handler(event:StatusEvent):void
		{
			lc.removeEventListener(StatusEvent.STATUS, onLCSTATUS_Handler);
			switch (event.level) {
				case "status":
					trace("LocalConnection.send() succeeded");
					break;
				case "error":
					trace("LocalConnection.send() failed");
                                                                          // Постоянно выбивает сюда, ошибка соединения
					break;
			}
		}
Код загружаемого swf (Flex) в AIR:

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   minWidth="840" minHeight="600" backgroundColor="#666633"
			   applicationComplete="init()">
 
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			private var lc:LocalConnection = new LocalConnection();
 
			private function init():void
			{ 
				lc.client = this;
 
				lc.addEventListener(StatusEvent.STATUS, onLCStatus);
 
 
					lc.allowDomain('*');
 
					try{  
						lc.connect('_treeConnection');
						Alert.show('lc.domain'); // После загрузки в Air выдает app#myApp.tech  - тоесть домены одинаковые
						}catch(error:ArgumentError){  
						Alert.show("Error: It can not connect your correct domain.");  
						}  
			}
 
			public function _setParam(par:String):void
			{
				label_1.text = par;
			}
 
			protected function onLCStatus(event:StatusEvent):void
			{
				switch (event.level) {
					case "status":
						label_1.text =  "LocalConnection.send() succeeded";
						break;
					case "error":
						label_1.text =  "Cant connect...the connection name is already being used by another SWF";
						break;
				}
 
			}
 
		]]>
	</fx:Script>
	<mx:Tree x="24" y="22" width="280" height="319" contentBackgroundColor="#A0A086"
			 dataProvider="{Передам сюда массив в будуущем}" labelField="@label"></mx:Tree>
	<s:Label id="label_1" x="328" y="26"  />
 
</s:Application>
В первой части блока с кодом AIR приложения пытался разрешения давать:
Код AS3:
try {
      Security.allowDomain("app#myApp.tech");
      }
      catch (e:Error) 
     {
     trace(e.message); 
                                // Error #3207: Application-sandbox content cannot access this feature.
     };

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

Подскажите пожалуйста, где я ошибся и что поправить?


.

Добавлено через 24 часа 7 минут
Ошибку выявил.. команда загруженной флешке посылалась раньше чем она грузилась полностью.. Решение: поставил таймер на 1 секунду по завершению загрузки в обработчик события onLICompleteHandler. Команда send посылается при срабатывании события TIMER.

Поговорил сам с собой, спасибо мне ))
__________________
Набирать программы могут многие, программировать - единицы

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

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

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


 


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


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