避免子SWF中的代码中出现空对象引用错误

时间:2015-07-14 23:24:03

标签: actionscript-3 flash loader

我正在创建一个加载不同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()

任何有关捕获错误,禁用/删除代码或任何其他想法的帮助都将非常感激 感谢。

1 个答案:

答案 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
        }
    }
}

这将阻止初始化子对象,直到设置了阶段引用。对于所有子对象,在设置阶段之前将首先调用构造函数,因此您不能依赖它在构造函数中。