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

#flash #actionscript-3 #swfloader

#flash #actionscript-3 #swfloader

Вопрос:

Я пытаюсь загрузить два swf-файла один за другим из одного домена в основной проигрыватель flash… При загрузке первого… это работает нормально, но когда я пытаюсь загрузить другой, 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 amp;amp; 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. Без какой-либо ссылки на код никто не может помочь.

Ответ №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

Комментарии:

1. Я в замешательстве. 🙂 Помогло ли мое решение?