0

我正在尝试将两个 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()
4

1 回答 1

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

于 2011-04-09T19:07:48.087 回答