Flash AS3从同一服务器加载2个不同的SWF获取空对象引用错误

时间:2011-04-09 16:38:01

标签: flash actionscript-3 swfloader

我正在尝试将两个swf文件从同一个域一个接一个地加载到主Flash播放器中...... 当第一个加载时......它工作正常,但是当我试图加载另一个时,第一个的动作脚本出来了(stop()函数停止工作) 另外,第二个问题是沙箱违规(#2121)。

我找不到这个问题的原因......

第一个swf的加载代码:

...
ldr = new Loader();
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoaded);
ldr.load(new URLRequest(swf1filename));
...
function swfLoaded(e:Event):void {
    mcExt = MovieClip(e.currentTarget.content);
    mcExt.x = 0;
    mcExt.y = 32;
    addChild(mcExt);
}

第二个swf的加载代码:

  ...
function showSWF2(){
        if ( end_movie_swf == null && endMcExt== null ){
            end_movie_swf = new Loader();
            end_movie_swf.contentLoaderInfo.addEventListener(Event.COMPLETE, Swf2Loaded);
            end_movie_swf.load(new URLRequest(endSwffilename));

        }else{
            endMcExt.gotoAndPlay("show");
        }
    }
    ...
function Swf2Loaded(e:Event):void {
    trace(e);
    endMcExt = MovieClip(e.currentTarget.content);
    end_movie_swf.contentLoaderInfo.removeEventListener(Event.COMPLETE, endSwfLoaded);
    endMcExt.x = 0;
    endMcExt.y = 0;
    addChildAt(endMcExt,3);
    endMcExt.gotoAndStop("show");
}

我收到了这个错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at SWF1::MainTimeline/frame13()

1 个答案:

答案 0 :(得分:0)

我猜这三个swf都在同一个ApplicationDomain中运行。 这意味着您意外地在所有swf中使用相同对象的引用。

你应该尝试发送一个LoaderContext,告诉加载的swf在它自己封装的ApplicationDomain中运行。

像这样:

var loaderContext:LoaderContext = new LoaderContext();
loaderContext.applicationDomain = new ApplicationDomain();

ldr.load(new URLRequest(swf1filename),loaderContext);

对第二个Loader对象执行相同操作。

资源链接:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/ApplicationDomain.html