|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Передача данных из приложения Air в Swf через LocalConnection
Ниже код для приложения Air (Sender.fla):
var lc:LocalConnection = new LocalConnection(); lc.send("_myConn", "syncAllItems", "Hello world!"); var localConnection:LocalConnection = new LocalConnection(); localConnection.allowDomain("*"); localConnection.client = this; localConnection.connect("_myConn"); // function syncAllItems(t:String):void { my_txt.text = t; } Error #2044: Unhandled SecurityErrorEvent:. text=Error #2047: Security sandbox violation: LocalConnection.send: app#Sender cannot access file:///Users/volcanoflash/Dropbox/Reseiver.swf. Оба файла при этом лежат в одной директории... Опробовано и на Mac и на Win. Помогите советом, коллеги! |
|
|||||
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Спасибо огромное. Я убил кучу времени, пытаясь понять в чем заговздка.
|
|
|||||
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
А подскажите еще, что нужно, чтобы избежать этой проблемы: надежный сертификат разработчика? или что-то другое? Иначе выходит, что LocalConnection между Air и Swf в принципе не возможен...
|
|
|||||
Если у вас первое приложение именно AIR, то можно смотреть в сторону ServerSocket:
http://help.adobe.com/en_US/FlashPla...verSocket.html |
|
|||||
Регистрация: Aug 2012
Сообщений: 77
|
Хотелось бы приподнять данную тему дабы новую не открывать.
Столкнулся с такой же проблемой. Создал локальное приложение AIR (Флеш) - грузит в себя флешку через Loader и добавляет его на сцену (все ОК, грузит). Загружаемая в AIR флешка создана мною как Web приложение написанное на Flex. Теперь из AIR приложения в загруженную SWF нужно передать параметр (текст или массив), обработать его там и вывести в этой же флешке результат. Для чего мне это нужно. В AIR (Флеш) нет компонента Tree (древовидное отображение массива). А мне он нужен. К сожалению не разобрался как воспользоваться сторонними реализациями Tree компонента под флеш, поэтому решил попробовать подгрузить Flex флешку. Воспользовался LocalConnection для связи AIR с SWF. Если не вгружать SWF в AIR, то все работает, параметр передается, связь удачна. Проблемы начинаются с загрузкой swf в AIR В общем код AIR который делает запрос в загруженный swf: //обработчик события нажатия на кнопку, что грузит 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; } } <?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> 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. |
|
« Предыдущая тема | Следующая тема » |
|
|