Flash AS3 Загрузка 2 Разные SWF-файлы с одного сервера получают ошибку ссылки на нулевой объект - PullRequest
0 голосов
/ 09 апреля 2011

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

Я полагаю, что все эти три SWF работают в одном домене приложения. Это означает, что вы случайно используете ссылки на одни и те же объекты во всех 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

...