AIR加载服务器承载的SWF到同沙箱(AIR Loading server hosted swf i

2019-06-27 05:12发布

我有一个AIR应用我的工作,需要加载SWF(总是从本地主机)将访问一些方法,它的父,反之亦然。 我不担心在一个桌面应用程序,虽然打开巨大的安全漏洞。 我一直在寻找全国各地,但不断撞击墙壁那里每个执行。

在SWF我的当前设置负载和它起着但我从沙箱得到一个小错误,因为我在同一个作为应用程序我不是。 有谁知道如何让过去这个错误所以完全自由的AIR应用程序和SWF之间开辟了?

*安全沙箱冲突*

SecurityDomain中的“http://localhost/test.swf”尝试访问不兼容的情况下“应用程序:/Test_Player.swf”

public function loadSWF():void {

//var context:LoaderContext = new LoaderContext();
//context.checkPolicyFile = true;
//context.applicationDomain = ApplicationDomain.currentDomain;
//context.securityDomain = SecurityDomain.currentDomain;

var req:URLRequest = new URLRequest(swfURL);
adLoader = new Loader();

videoCanvas.rawChildren.addChild(adLoader);

loader.contentLoaderInfo.addEventListener(Event.INIT, adLoadedHandler, false, 0, true);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError, false, 0, true);

//loader.load(req, context);
loader.load(req);
}

Answer 1:

你需要用的URLLoader加载您的SWF远处,然后通过loadByte重新加载它。 通过这种方法,你会路过安全。

package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.system.ApplicationDomain;
    import flash.system.LoaderContext;

    public class TestDistantSwf extends Sprite
    {
        private var _urlLoader : URLLoader = new URLLoader;
        private var _loader : Loader = new Loader;

        public function TestDistantSwf()
        {

            addChild(_loader);
            // Won't work
            //_loader.load(new URLRequest("http://localhost/test.swf"));

            // Load it as binary
            _urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
            _urlLoader.addEventListener(Event.COMPLETE, onLoad);
            _urlLoader.load(new URLRequest("http://localhost/test.swf"));
        }

        private function onLoad(e : Event) : void
        {
            // Load distant swf data locally
            _loader.loadBytes(_urlLoader.data, new LoaderContext(false, ApplicationDomain.currentDomain));
        }
    }
}

如果您需要通过像闪光变种参数,双向做,如果使用空调2.6或更高版本,可以使用LoaderContext.parameters:

private function onLoad(e : Event) : void
{
    var lc : LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
    lc.parameters ={
        foo:"hello !"
    };
    lc.allowCodeImport = true;

    // Load distant swf data locally
    _loader.loadBytes(_urlLoader.data, lc);
}

然后在你加载的SWF loaderInfo.parameters得到它。

或者,你可以调用加载的SWF的功能:

private function onLoadBinary(e : Event) : void
{
    e.target.content.init("hello 2 !");
}

private function onLoad(e : Event) : void
{
    var lc : LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
    lc.allowCodeImport = true;

    // Load distant swf data locally
    _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadBinary);
    _loader.loadBytes(_urlLoader.data, lc);
}

这将加载的SWF在其主类拨打:

public function init(foo : String) : void
{
    trace(foo);
}


文章来源: AIR Loading server hosted swf into same sandbox