Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Security.allowDomain("*") (http://www.flasher.ru/forum/showthread.php?t=186655)

AlexCooper 06.11.2012 21:14

Security.allowDomain("*")
 
Здравствуйте.
Переношу проект под AIR. Компилятор ругается на
Код AS3:

Security.allowDomain("*");

Код:

        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 минуты
Без
Код AS3:

Security.allowDomain("*");

флеш не передает данные

caseyryan 06.11.2012 21:19

Флеш плеер не передает? или Эйр?

AlexCooper 06.11.2012 21:33

Цитата:

Сообщение от caseyryan (Сообщение 1103133)
Флеш плеер не передает? или Эйр?

Пробовал и так и так. Пробовал убрать вообще настройки домена, но AIR который должен получать данные молчит. А при отправке
Код:

LocalConnection.send() failed[StatusEvent type="status" bubbles=false cancelable=false eventPhase=2 code=null level="error"]

Astraport 06.11.2012 21:45

Обрамите try catch

AlexCooper 06.11.2012 21:54

Цитата:

Сообщение от Astraport (Сообщение 1103139)
Обрамите try catch

2 сек.

Может кто наглядно увидит причину

коннектор
Код AS3:

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;
            }
        }
        }
 
}

сендер
Код AS3:

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);}
 
        }
}

ресивер
Код AS3:

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 {}
        }
 
}

Добавлено через 12 минут
На сколько я понял у меня вообще не работает LocalConnection

Добавлено через 15 минут
Кто может, поделитесь простым примером связи через локалконекшен между двумя приложениями AIR

Добавлено через 21 минуту
Понял в чем проблема. В AIR к локалконекшену добавляется Ид приложения
Код AS3:

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');

Добавлено через 30 минут
кто-то работал с локалконекшеном в эйре? Если есть такие поделитесь экземплом

SpetZ_Naz 17.02.2015 01:12

Так что, получилось обратиться к методам swf из AIR? А если swf загрузить в AIR loader'ом, можно обращаться к ее методам через LocalConnection?

Что-то на форуме не нашел четкого ответа как обойти SecurityError при использовании команды send('channel', 'method', 'message or Object') из AIR в загруженную в него swf. Может кто сталкивался с подобной проблемой? Тем много подобных, плодить еще одну не хочется..


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

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