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

Actionscript 3 避免子SWF内的代码中出现空对象引用错误,actionscript-3,flash,loader,Actionscript 3,Flash,Loader,我正在创建一个加载不同主权财富基金的全局加载程序。 我没有访问儿童SWFs代码的权限。 我试图避免子SWF中可能引用“stage”等的代码中出现空对象引用错误。 我已经添加了所有可能的事件侦听器,添加了try/catch,尝试了所有应用程序域和LoaderContext排列。例如: applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); var con:LoaderContext = new Load

我正在创建一个加载不同主权财富基金的全局加载程序。
我没有访问儿童SWFs代码的权限。
我试图避免子SWF中可能引用“stage”等的代码中出现空对象引用错误。
我已经添加了所有可能的事件侦听器,添加了try/catch,尝试了所有应用程序域和LoaderContext排列。例如:

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中禁用/删除代码。
例如,以下主类:

package  {

    import flash.display.MovieClip; 
    public class Main extends MovieClip {   

        public function Main() {
            var h = this.stage.stageHeight;
            trace(h);
        }
    }
}
将压碎任何试图将其作为另一个SWF的一部分加载的SWF

TypeError:错误#1009:无法访问空对象引用的属性或方法。
基本上

如果您有任何关于捕获错误、禁用/删除代码或其他想法的帮助,我们将不胜感激。

谢谢。

您有权访问子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
        }
    }
}

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

为什么要从引用
stage
的构造函数开始?这在任何情况下都是不可取的。您应该能够通过事件异步捕获错误参见这个问题:+1,基本上说:
stage
在文档类的构造函数中不
null
。但是,如果你不知道这个类是否被用作文档类(或者作为一个子代使用),你应该总是在构造函数中不考虑<代码>阶段<代码>,并使用提供的模板“<代码>事件”。不幸的是,我没有访问子swf文件的权限。(我已经更新了问题以澄清问题)@EliadBarazi我不知道该怎么做。您不能忽略错误,因为子swf可能无法工作,并且您不能在构造函数发生之前设置阶段,因为您必须先调用构造函数,然后才能对其执行任何操作。