J'ai créé swf simple avec interface:swf Chargement et l'utiliser via l'interface
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
}
Et puis je suis en train de le charger:
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");
}
Donc, si j'ai test.swf dans le même répertoire (local), ça marche. Mais si je le place sur le serveur dédié: (event.target.content as ITest) renvoie null. Cependant, je peux accéder à speak() sans interface comme this event.target.content.speak ("a!");
Comment résoudre ce problème?
Merci, mais ce n'est pas un problème de coercition de type. Tout est une question de sécurité. J'ai essayé de charger swf sur le serveur web et ça marche. Il demande crossdomain.xml même avec checkPolicyFile = false et fonctionne. Maintenant, je me suis rendu compte que je ne pouvais tout simplement pas charger swf à partir du serveur web lorsque je cours un swf sur une machine locale. – Shens
Je ne comprends pas comment un problème de sécurité peut provoquer "event.target.content as ITest" pour retourner null mais "event.target.content.speak (" a! ");" travailler. – David
Je suis d'accord avec David ici! Désolé, je vous ai donné +1 mais c'était destiné à David :))) Pas de soucis! ;) Vous avez peut-être un problème de sécurité, mais ce n'est pas le contexte de votre question ... – PatrickS