|
|
|||||
Security.allowDomain("*")
Здравствуйте.
Переношу проект под AIR. Компилятор ругается на SecurityError: Error #3207: Application-sandbox content cannot access this feature. at flash.system::Security$/allowDomain() at tvTranslator/init()[D:\workset\bi\panasonic\tvTranslator.as:38] at runtime::ContentPlayer/loadInitialContent() at runtime::ContentPlayer/playRawContent() at runtime::ContentPlayer/playContent() at runtime::AppRunner/run() at ADLAppEntry/run() at global/runtime::ADLEntry() Добавлено через 3 минуты Без флеш не передает данные
__________________
return this... |
|
|||||
Пробовал и так и так. Пробовал убрать вообще настройки домена, но AIR который должен получать данные молчит. А при отправке
__________________
return this... |
|
|||||
2 сек.
Может кто наглядно увидит причину коннектор package { import flash.net.LocalConnection; import flash.events.Event; import flash.events.StatusEvent; import flash.display.Sprite; import flash.text.TextField; public class SyncSystem extends Sprite{ public var process:Object; protected var conn:LocalConnection; public var channel:String = "default"; public function SyncSystem() { conn = new LocalConnection(); conn.addEventListener(StatusEvent.STATUS, onStatus); } public function send(method:String, param:Object = null):void { conn.send(channel,method,param); } public function set active($setup:Boolean):void { if ($setup) { conn.connect(channel); conn.client = this; } else trace("UserReject connection"); } public function command($pack:Object):void { process = $pack; dispatchEvent(new Event("CHANNEL")); } private function onStatus(event:StatusEvent):void { trace(event.level); switch (event.level) { case "status": trace("LocalConnection.send() succeeded"); break; case "error": trace("LocalConnection.send() failed"+event); break; } } } } package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.net.URLLoader; import flash.net.URLRequest; import SyncSystem; import flash.events.NetStatusEvent; import flash.net.NetConnection; import flash.net.NetStream; import flash.events.AsyncErrorEvent; import flash.display.Loader; import flash.display.StageDisplayState; import flash.utils.ByteArray; import flash.media.SoundTransform; import flash.display.StageScaleMode; import flash.display.StageAlign; import flash.system.System; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.system.Security; import src.loadPictures; import flash.utils.Timer; import flash.events.TimerEvent; public class MainControl extends Sprite { private var xml:XML; private var sync:SyncSystem = new SyncSystem(); public var sender:SyncSystem = new SyncSystem(); private var cache:Object = new Object(); private var setting:Object = new Object(); private var pannel:Sprite; private var strans:SoundTransform = new SoundTransform(0,0); private var timer = new Timer(5000); public function MainControl() { addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event):void { this.removeEventListener(Event.ADDED_TO_STAGE, init); stage.addEventListener(Event.RESIZE, onStageResize, false, 0, true); stage.align = StageAlign.TOP_LEFT; System.useCodePage = true; //Security.allowDomain("*"); timer.addEventListener(TimerEvent.TIMER, refreshTimer); pannel = new Sprite(); cache.cast = new Array(); cache.playlist = new Array(); cache.images = new Array(); cache.img1 = new Sprite(); cache.img2 = new Sprite(); backimage.addChild(cache.img1); backimage.addChild(cache.img2); cache.frame = 0; cache.image = 0; cache.bid = 1; sender.channel = "AdminSecurity"; sender.active = true; sender.addEventListener("CHANNEL", channel); addChild(pannel); ReadXML(); } private function resetter(e:Event):void { cache.img1.alpha+=.1; cache.img2.alpha-=.1; if (cache.img1.alpha>=1) { e.target.removeEventListener(Event.ENTER_FRAME, resetter); while (cache.img2.numChildren) cache.img2.removeChildAt(0); cache.img3 = cache.img1; cache.img1 = cache.img2; cache.img2 = cache.img3; cache.img2.alpha = 1; cache.img1.alpha = 0; if (++cache.image==cache.images.length) cache.image = 0; cache.img1.addChild(new loadPictures(cache.images[cache.image])); } } private function refreshTimer(e:TimerEvent):void { cache.img1.addEventListener(Event.ENTER_FRAME, resetter); } private function channel(e:Event):void { var data = e.target.process; trace("channel"); switch (data.using) { case "screen": { trace("screen"+data.bm); } break; } } private function ReadXML():void { xml = new XML(); var XML_URL:String = "setting.xml"; var myLoader:URLLoader = new URLLoader(new URLRequest(XML_URL)); myLoader.addEventListener("complete", xmlLoaded); } private function backSetter(e:Event):void { var f = cache.frame++%200; var d = 10; if (f==0) { cache.img1.visible = true; if (++cache.image==cache.images.length) cache.image = 0; } else if (f<d) { cache.img2.alpha -= Math.floor(((1/d)*100))/100; cache.img1.alpha += Math.floor(((1/d)*100))/100; } if (f==d) { while (cache.img2.numChildren) cache.img2.removeChildAt(0); cache.img3 = cache.img1; cache.img1 = cache.img2; cache.img2 = cache.img3; cache.img2.alpha = 1; cache.img1.alpha = 0; } if (f==11) { cache.img1.addChild(new loadPictures(cache.images[cache.image])); cache.img1.visible = false; } } private function xmlLoaded(event:Event):void { xml = XML(event.target.data); titlebox.title.htmlText = xml.title; sync.channel = xml.channel; setting.icon = xml.directory.attribute("icons"); setting.image= xml.directory.attribute("image"); setting.video= xml.directory.attribute("video"); for each(var library:XML in xml.video) for each( var cast in library) { cache.playlist.push(setting.video+"/"+cast.attribute("src")); cache.cast.push({"title":cast, "icon":setting.icon+"/"+cast.attribute("icon"), "src":setting.video+"/"+cast.attribute("src")}); } for each(var imgs:XML in xml.image) for each( var img in imgs) { cache.images.push(setting.image+"/"+img.attribute("src")); } cache.img1.addChild(new loadPictures(cache.images[0])); var i = 0; for each( var data in cache.cast) { i++; this['b'+i].image.selector.visible = false; this['b'+i].bid = i; this['b'+i].data = data; this['b'+i].title.text = data.title; this['b'+i].addEventListener(MouseEvent.MOUSE_DOWN, sending); this['b'+i].image.img.addChild(new loadPictures(data.icon)); this['b'+i].w = this['b'+i].image.width; this['b'+i].h = this['b'+i].image.height; var connect_nc:NetConnection = new NetConnection(); connect_nc.connect(null); this['b'+i].stream_ns = new NetStream(connect_nc); this['b'+i].stream_ns.checkPolicyFile = false; this['b'+i].stream_ns.bufferTime = 5; this['b'+i].stream_ns.client = this; this['b'+i].stream_ns.soundTransform = strans; this['b'+i].image.video.attachNetStream(this['b'+i].stream_ns); this['b'+i].stream_ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, AsyncErrorHandler); this['b'+i].stream_ns.addEventListener(NetStatusEvent.NET_STATUS, PlayerStatusHandler); this['b'+i].stream_ns.play(data.src); this['b'+i].stream_ns.seek(1); this['b'+i].stream_ns.pause(); } onStageResize(new Event("")); timer.start(); b1.show = true; b1.image.img.visible = false; b1.image.selector.visible = true; b1.addEventListener(Event.ENTER_FRAME, shower); cache.stream = b1; b1.stream_ns.resume(); sync.send("command", {"using":"playlist","playlist":cache.playlist}); sync.send("command", {"using":"play","src":b1.data.src}); } private function PlayerStatusHandler(event:NetStatusEvent) { trace(event.info.code); switch (event.info.code) { case "NetStream.Play.Stop": { if (++cache.bid==7) cache.bid=1; this['b'+cache.bid].dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN)); } break; } } private function sending(e:MouseEvent):void { if (cache.stream) { cache.stream.stream_ns.pause(); cache.stream.stream_ns.seek(1); cache.stream.image.img.visible = true; cache.stream.image.selector.visible = false; cache.stream.show = false; } cache.bid = e.currentTarget.bid; e.currentTarget.show = true; e.currentTarget.image.img.visible = false; e.currentTarget.image.selector.visible = true; if (!e.currentTarget.hasEventListener(Event.ENTER_FRAME)) { e.currentTarget.addEventListener(Event.ENTER_FRAME, shower); } cache.stream = e.currentTarget; e.currentTarget.stream_ns.resume(); sync.send("command", {"using":"play","src":e.currentTarget.data.src}); if(stage.displayState != StageDisplayState.FULL_SCREEN) stage.displayState = StageDisplayState.FULL_SCREEN; } private function revers(e:MouseEvent):void { e.currentTarget.show = false; if (!e.currentTarget.hasEventListener(Event.ENTER_FRAME)) { e.currentTarget.addEventListener(Event.ENTER_FRAME, shower); } } private function shower(e:Event):void { e.target.image.width += (((e.target.show) ? e.target.w*1.1 : e.target.w)-e.target.image.width)/5; e.target.image.height += (((e.target.show) ? e.target.h*1.1 : e.target.h)-e.target.image.height)/5; e.target.title.y = e.target.image.y+e.target.image.height/2; } public function onImageData(d:Object):void {trace("img");} private function onStageResize(e:Event):void {} public function onMetaData(p_info:Object):void {} public function handleCoverImage(p_data:Array):void { trace("handleCoverImage"); var loader:Loader = new Loader(); loader.loadBytes(p_data[0] as ByteArray); addChildAt(loader, 0); } private function AsyncErrorHandler(e:AsyncErrorEvent):void { trace(e.error);} } } package { import flash.system.Security; import flash.net.NetConnection; import flash.net.NetStream; import flash.events.Event; import flash.events.NetStatusEvent; import flash.display.Sprite; import flash.display.StageDisplayState; import SyncSystem; import flash.display.BitmapData; import flash.display.Bitmap; import flash.utils.ByteArray; import flash.display.PixelSnapping; public class tvTranslator extends Sprite { private var cache:Object = new Object(); private var sync:SyncSystem = new SyncSystem(); private var stream_ns:NetStream; public function tvTranslator() { addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event):void { this.removeEventListener(Event.ADDED_TO_STAGE, init); //Security.allowDomain("localhost"); stage.addEventListener(Event.RESIZE, onStageResize, false, 0, true); sync.channel = "PanasonicSecurity"; sync.active = true; sync.addEventListener("CHANNEL", channel); cache.screen = new Sprite(); var connect_nc:NetConnection = new NetConnection(); connect_nc.connect(null); stream_ns = new NetStream(connect_nc); stream_ns.checkPolicyFile = false; stream_ns.client = this; stream_ns.addEventListener(NetStatusEvent.NET_STATUS, PlayerStatusHandler); videocont.video.attachNetStream(stream_ns); } private function onStageResize(e:Event):void { videocont.video.x = 0; videocont.video.y = 0; } private function channel(e:Event):void { var data = e.target.process; //logger.text += "channel\n"; switch (data.using) { case "play": { broadcasting(data.src); } break; case "playlist": { cache.playlist = data.playlist; cache.trackid = 0; } break; } } function PlayerStatusHandler(event:NetStatusEvent) { trace(event.info.code); switch (event.info.code) { case "NetStream.Play.Stop": { //cache.trackid++; //broadcasting(); } break; } if (cache.playerLastEvent == "NetStream.Buffer.Flush" && event.info.code == "NetStream.Buffer.Empty") { StopPlayback(event); } else if (cache.playerLastEvent == "NetStream.Buffer.Flush" && event.info.code != "NetStream.Buffer.Empty") cache.playerLastEvent = ""; else if (event.info.code == "NetStream.Buffer.Flush") cache.playerLastEvent = "NetStream.Buffer.Flush"; } private function StopPlayback(event:NetStatusEvent):void { trace("video end"); } private function broadcasting(src:String):void { stream_ns.play(src); if(stage.displayState != StageDisplayState.FULL_SCREEN) stage.displayState = StageDisplayState.FULL_SCREEN; } private function createScreen(e:Event):void {} public function onMetaData(p_info:Object):void {} } } На сколько я понял у меня вообще не работает LocalConnection Добавлено через 15 минут Кто может, поделитесь простым примером связи через локалконекшен между двумя приложениями AIR Добавлено через 21 минуту Понял в чем проблема. В AIR к локалконекшену добавляется Ид приложения receivingLC.allowDomain('app#com.example'); receivingLC.connect('myConnection'); // sendingLC is an AIR application with app ID = com.example (and no publisher ID) sendingLC.send('app#com.sample:myConnection', 'myMethod'); кто-то работал с локалконекшеном в эйре? Если есть такие поделитесь экземплом
__________________
return this... |
|
|||||
Регистрация: Aug 2012
Сообщений: 77
|
Так что, получилось обратиться к методам swf из AIR? А если swf загрузить в AIR loader'ом, можно обращаться к ее методам через LocalConnection?
Что-то на форуме не нашел четкого ответа как обойти SecurityError при использовании команды send('channel', 'method', 'message or Object') из AIR в загруженную в него swf. Может кто сталкивался с подобной проблемой? Тем много подобных, плодить еще одну не хочется..
__________________
Набирать программы могут многие, программировать - единицы |
Часовой пояс GMT +4, время: 02:35. |
|
« Предыдущая тема | Следующая тема » |
|
|