我正在加载.swf并尝试根据其中的嵌入式xml文档查找一个类。我无休止地看了这个问题,每个人都说“你的班级不公开”,“你的班级名称干扰了你的文档类”,或者“你没有使用相同的ApplicationDomain”,其中没有一个是真的。这是我的代码:
在CoCMain.as中,使用CoCMod.fla:
private function pluginLoadingComplete(e:Event):void {
var testXML:XML = new XML(new e.target.content.description);
trace(e.target.applicationDomain.hasDefinition("blah.blaah.testPlugin.TestMain"));//returns false
trace(ApplicationDomain.currentDomain.hasDefinition("blah.blaah.testPlugin.TestMain"));//returns false
trace(testXML.main[0]);//returns blah.blaah.testPlugin.TestMain
var pluginClass:Class = e.target.applicationDomain.getDefinition(testXML.main[0]) as Class;//error here
}
在TestMain.as中,使用TestMod.fla(这是我正在加载的swf):
package blah.blaah.testPlugin {
public class TestMain {
public function TestMain():void {
super();
}
public function onEnable():void {
trace("blah");
}
}
}
在TestMod.fla的第1帧中:
import blah.blaah.testPlugin.TestMain;
[Embed(source = 'main.xml', mimeType = "application/octet-stream")]
const description:Class;
xml文件:
<mod>
<name>Test Mod</name>
<description>Please ignore</description>
<author>Bleachisback</author>
<version>1.0</version>
<main>blah.blaah.testPlugin.TestMain</main>
</mod>
我得到的错误:
ReferenceError: Error #1065: Variable TestMain is not defined.
at flash.system::ApplicationDomain/getDefinition()
at me.bleachisback.cocMod::CoCMain/pluginLoadingComplete()
答案 0 :(得分:0)
这听起来像我遇到的类似问题 - 您尝试从描述性名称动态创建实例。
如果没有显式实例化目标类的实例,编译器将不会在构建中包含您的目标类,因此该类不存在(因此您的错误)。所以,你可以添加一行
var xyz:TestMain = new TestMain();
但这种目的却失败了......
您可以使用includes
指令强制编译器包含您的类,并包含必须包含的类列表。
答案 1 :(得分:0)
你试过这个吗?
var pluginClass:Class = e.target.applicationDomain.getDefinition(testXML.main.text().toString()) as Class;