我正在创建一个加载不同SWF的全局加载器 我无法访问子SWF代码 我试图避免子SWF中可能引用“阶段”等的代码中的空对象引用错误 我添加了所有可能的事件监听器,添加了try / catch,尝试了所有的applicationDomains和LoaderContexts排列。例如:
applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
var con:LoaderContext = new LoaderContext(false, applicationDomain );
con.allowCodeImport = true;
var _loader:Loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad);
_loader.load( new URLRequest(fileName + ".swf"), con);
我无法捕获错误或禁用/删除此类SWF中的代码 例如,以下Main类:
package {
import flash.display.MovieClip;
public class Main extends MovieClip {
public function Main() {
var h = this.stage.stageHeight;
trace(h);
}
}
}
将粉碎任何试图将其作为另一个SWF的一部分加载的SWF。
TypeError:错误#1009:无法访问空对象引用的属性或方法 在Main()
任何有关捕获错误,禁用/删除代码或任何其他想法的帮助都将非常感激 感谢。
答案 0 :(得分:3)
您是否可以访问子swf文件中的代码?如果是这样,你可以这样做:
package {
import flash.display.MovieClip;
public class Main extends MovieClip {
public function Main() {
if (stage) {
init();
}
else {
addEventListener(Event.ADDED_TO_STAGE, init);
}
}
public function init(evt:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
// You can now access the stage here
}
}
}
这将阻止初始化子对象,直到设置了阶段引用。对于所有子对象,在设置阶段之前将首先调用构造函数,因此您不能依赖它在构造函数中。