在AIR中使用bytearray加载Swf

时间:2011-01-25 06:43:40

标签: flex air flash

我们要求AIR应用程序加载flex生成的swf,它使用SWFLoader加载flash生成的swf。这不符合要求。这会出现以下错误: SecurityError:错误#3226:当LoaderContext.allowCodeImport为false时无法导入SWF文件。

这是我们的AIR应用程序。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
<mx:Script>
<![CDATA[

import mx.controls.SWFLoader;

[Embed(source="FlexLoadingFlash.swf")]
public var flexMovie:Class;

private function initApp():void {
    // First convert the Swf into MovieClip
    var movieclip:MovieClip = new flexMovie();

    // get the byteArray from movieClip
    var byteArray:ByteArray = movieclip.movieClipData; 

    var swfLoader:SWFLoader = new SWFLoader();

    // load bytearray into swfLoader
    swfLoader.source = byteArray;

    swfLoader.maintainAspectRatio = false; 
    swfLoader.percentHeight = vbox.height;
    swfLoader.percentWidth = vbox.width;
    swfLoader.invalidateDisplayList();
    swfLoader.invalidateSize();

    // now add the swfloader into container
    vbox.addChild(swfLoader); 
} 

]]>

</mx:Script>

<mx:VBox id="vbox" width="100%" height="100%" verticalCenter="0" horizontalCenter="0" cacheAsBitmap="true" >

</mx:VBox>

</mx:WindowedApplication>

请告诉我们如何解决此问题。

3 个答案:

答案 0 :(得分:7)

使用Loader.loadBytes()加载SWF。创建LoaderContext的实例。 loadBytes方法将LoaderContext实例作为参数。将LoaderContext实例的allowCodeImport属性设置为true,它应该可以正常工作

答案 1 :(得分:2)

或者您可以在设置源

之前添加这三行
var loaderContext: LoaderContext = new LoaderContext();
loaderContext.allowLoadBytesCodeExecution = true; 
swfLoader.loaderContext = loaderContext;

答案 2 :(得分:2)

<mx:SWFLoader id="swfObj" 
    width="100%" height="100%"
    complete="swfObj_completeHandler(event)"/>

<fx:Script>   
    <![CDATA[
        [Bindable]
        [Embed(source="assets/soundbar.swf")]
        private static var swfClass:Class;

        private var swfSoundBar : MovieClip;

        [Bindable] private var mp3Player:MP3Player = MP3Player.getInstance();

        protected function init(event:FlexEvent):void
        {
            swfSoundBar = new swfClass();

            var byteArray:ByteArray = swfSoundBar.movieClipData; 

            var loaderContext: LoaderContext = new LoaderContext();
            loaderContext.allowLoadBytesCodeExecution = true; 
            swfObj.loaderContext = loaderContext;

            swfObj.source = byteArray;
        }

        protected function swfObj_completeHandler(event:Event):void
        {
            swfSoundBar = SWFLoader(event.target).content as MovieClip;
            swfSoundBar.width = 32;
            swfSoundBar.height = 14;

            swfSoundBarShowHide();
        }

        protected function swfSoundBarShowHide():void 
        {
            if (swfSoundBar){
                if (mp3Player.isPlaying){
                    swfSoundBar.gotoAndStop(0);
                    swfSoundBar.stop();
                } else {
                    swfSoundBar.gotoAndPlay(0);
                }   
            }               
        }

    ]]>
</fx:Script>
相关问题