Flash AS3 загружает 2 разных SWF с одного и того же сервера с ошибкой ссылки на пустой объект

Я пытаюсь загрузить два SWF-файла один за другим из одного домена в основной флеш-плеер ... Когда первый загружен ... он работает нормально, но когда я пытаюсь загрузить другой, ActionScript первого вызывает уродство (функция 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()

person hdmi3killer    schedule 09.04.2011    source источник
comment
Без ссылки на код никто не может помочь.   -  person robertp    schedule 09.04.2011


Ответы (1)


Я предполагаю, что все эти три 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.

person Tjofras    schedule 09.04.2011
comment
Я смущен. :) Помогло ли мое решение? - person Tjofras; 10.04.2011