[英]Loading swf and using it through interface
我用接口創建了簡單的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為ITest)將返回null。 但是,我可以在沒有諸如event.target.content.speak(“ a!”);之類的接口的情況下訪問speak()。
如何解決這個問題呢?
嘗試這個:
var test:ITest = ITest(event.target.content );
如何在兩個瑞士法郎之間共享ITest接口?
我想您有兩個項目,一個用於test.swf(已加載的項目),另一個用於加載程序(我稱他為loader.swf)。 我認為您不能只兩次聲明ITest接口(一個用於test.swf,一個用於loader.swf)。 如果這樣做,將有兩個接口,它們具有相同的接口名稱,相同的聲明方法,但它們仍將是2個不同的接口。 而將彼此融合會失敗。
我敢打賭,如果您這樣做(如PatrickS建議)
var test:ITest = ITest(event.target.content );
您會看到類型錯誤->這就是這種形式的轉換的優勢。 這將證實我的想法:這兩個接口是不同的。
要真正共享兩個項目之間的接口,應將其存儲到一個庫(.swc文件)中,並在兩個項目中使用該庫。 這應該可以解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.