Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex 3,从服务器加载时无法将SystemManager转换为SystemManager?_Apache Flex_Actionscript 3 - Fatal编程技术网

Apache flex Flex 3,从服务器加载时无法将SystemManager转换为SystemManager?

Apache flex Flex 3,从服务器加载时无法将SystemManager转换为SystemManager?,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我正在开发一个AIR应用程序,它需要在从网络中引入的swf上加载、运行和访问方法。使用模态在过去工作得很好,但由于设计限制,不可能用于此应用程序。下面您可以看到我加载ImageTest.swf然后调用函数Bleh()的代码 当swf是AIR应用程序的本地应用程序时,这可以正常工作,但当服务器上的ImageTest.swf处于关闭状态时,它可以正常加载,但会出现强制运行时错误(TypeError:error#1034:Type强制失败:无法转换_Engine_mx_Manager)_SystemM

我正在开发一个AIR应用程序,它需要在从网络中引入的swf上加载、运行和访问方法。使用模态在过去工作得很好,但由于设计限制,不可能用于此应用程序。下面您可以看到我加载ImageTest.swf然后调用函数Bleh()的代码

当swf是AIR应用程序的本地应用程序时,这可以正常工作,但当服务器上的ImageTest.swf处于关闭状态时,它可以正常加载,但会出现强制运行时错误(TypeError:error#1034:Type强制失败:无法转换_Engine_mx_Manager)_SystemManager@7c36281到mx.managers.SystemManager)的第行:

SystemManager(event.target.content).addEventListener(FlexEvent.APPLICATION_COMPLETE, swfAppComplete);

我相信这个错误可能与安全沙箱问题有关,但我不确定。提前谢谢

这与安全问题有关,您的AIR应用程序有应用程序安全沙箱,但加载的SWF没有。为了让它工作,您需要将SWF从网络下载到AIR应用程序中,然后使用“allowLoadBytesCodeExecution”选项重新加载它

代码如下所示:

    private function loadApp() : void {
        var urlLoader : URLLoader = new URLLoader();
        urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
        urlLoader.addEventListener( Event.COMPLETE, onAppLoaded );
        urlLoader.load( new URLRequest( url ) );
    }

    private function onAppLoaded( event : Event ) : void {
        var appLoader : Loader = new Loader();
        var context : LoaderContext = new LoaderContext();
        // don't assign currentDomain as applicationDomain here
        // it will UNABLE to unload swf later 
        context.applicationDomain = ApplicationDomain.currentDomain;
        context.allowLoadBytesCodeExecution = true;
        appLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, onAppExecuted );
        appLoader.loadBytes( ByteArray( ( event.currentTarget as URLLoader ).data ), context );
    }

    private function onAppExecuted( e : Event ) : void {
        content = SystemManager( LoaderInfo( e.target ).content );
        content.addEventListener( FlexEvent.APPLICATION_COMPLETE, onLoadedAppInitComplete );
    }
    private function loadApp() : void {
        var urlLoader : URLLoader = new URLLoader();
        urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
        urlLoader.addEventListener( Event.COMPLETE, onAppLoaded );
        urlLoader.load( new URLRequest( url ) );
    }

    private function onAppLoaded( event : Event ) : void {
        var appLoader : Loader = new Loader();
        var context : LoaderContext = new LoaderContext();
        // don't assign currentDomain as applicationDomain here
        // it will UNABLE to unload swf later 
        context.applicationDomain = ApplicationDomain.currentDomain;
        context.allowLoadBytesCodeExecution = true;
        appLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, onAppExecuted );
        appLoader.loadBytes( ByteArray( ( event.currentTarget as URLLoader ).data ), context );
    }

    private function onAppExecuted( e : Event ) : void {
        content = SystemManager( LoaderInfo( e.target ).content );
        content.addEventListener( FlexEvent.APPLICATION_COMPLETE, onLoadedAppInitComplete );
    }