我用界面创建了简单的swf:
public class Test extends MovieClip implements ITest
{
public function Test()
{
Security.allowDomain("*");
Security.allowInsecureDomain("*");
}
public function speak(str):String
{
trace(str);
return "yeah";
}
}
ITEST:
public interface ITest {
// Interface methods:
function speak(str):String
}
然后我正在尝试加载它:
public function SWFLoader()
{
var url='http://xxxxxxxx/test.swf';
var loadURL:URLRequest=new URLRequest(url);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
loader.load(loadURL, context);
}
private function completeHandler(event:Event):void
{
var test:ITest;
test = event.target.content as ITest;
test.speak("ggg");
}
因此,如果我在同一目录(本地方式)中有test.swf,那就可以了。但是,如果我将它放在专用服务器上:(event.target.content as ITest)返回null。但是,我可以访问speak()而不需要像event.target.content.speak(“a!”)这样的界面;
如何解决这个问题?
答案 0 :(得分:0)
试试这个:
var test:ITest = ITest(event.target.content );
答案 1 :(得分:0)
如何在两个swf之间共享ITest界面?
我想你有两个项目,一个用于test.swf(加载的一个),另一个用于加载器(我称之为loader.swf)。我想你不能只宣告两次ITest接口(一个用于test.swf,一个用于loader.swf)。如果这样做,将有两个接口,具有相同的接口名称,相同的声明方法,但它们仍然是2个不同的接口。而将一个投入另一个将失败 我打赌,如果你这样做(按照PatrickS的建议)
var test:ITest = ITest(event.target.content );
您会看到类型错误 - >这就是这种铸造方式的优势。这将证实我的想法:两个接口是不同的。
要真正共享2个项目之间的接口,您应该将其存储到库(.swc文件)中,并在2个项目中使用该库。这应该可以解决问题。