#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. Я в замешательстве. 🙂 Помогло ли мое решение?