2012-06-09 2 views
0

J'utilise un objet swf pour intégrer un swf. J'essaie d'utiliser l'interface externe pour appeler une fonction flash de JS, mais j'ai des problèmes. J'ai cherché tous les docs, lu une tonne de choses, et je suis convaincu que je le fais bien. Quelqu'un peut-il indiquer où le problème pourrait être?Obtenir une interface externe pour travailler avec un objet swf, ne peut pas comprendre ce que je fais mal

 var flashvars = {}; 
     var params = {wmode:"opaque", allowscriptaccess:"always" }; 
     var attributes = {id:"MySwf", name:"MySwf"}; 
     swfobject.embedSWF("MySwf.swf", "flashContent", "600", "400", "9.0.0", "swfs/expressInstall.swf", flashvars, params, attributes,function(e){ 
      if(e.success){ 
       _flashRef = e.ref; 
       testExternalInterface();      
      }else{ 
       alert("We are sorry, flash is required to view this content."); 
      } 
     }); 
     function testExternalInterface(){   
       var swf = document.getElementById("MySwf"); 
       swf.sendMeTheGoods("TEST TEST"); 
    }; 

ci-dessus est la fonction de code embed et js dans mon flash je

 if (ExternalInterface.available) 
     { 
      trace("adding external interface"); 
      ExternalInterface.addCallback("sendMeTheGoods", sendMeTheGoods); 
     } 
    public function sendMeTheGoods(text:String):void 
    { 
     trace("setting vars") 
     trace(text); 
     txtYouSent.text = text; 
    } 

Je reçois l'erreur Uncaught TypeError: Object # n'a pas de méthode 'sendMeTheGoods'

I » J'ai essayé de référencer document.getElementById ("MySwf"); et document.getElementById ("flashContent"); et j'ai l'erreur dans les deux sens. Aucune suggestion?

+1

Juste curieux, dans la fonction de rappel, le paramètre d'événement 'e' a une référence à l'objet Flash, est-ce utile? L'événement possède également une propriété 'id' que vous pouvez vérifier pour confirmer le bon identifiant. Enfin, vous semblez spécifier deux ID différents: un dans l'objet 'attributes' et un autre dans le second param de' swfobject.embedSWF() '. –

+0

Merci, c'est vrai, je l'ai corrigé, mais j'ai toujours le même problème – user379468

Répondre

0

L'interface API externe n'est pas immédiatement disponible, il faut une seconde pour qu'elle soit prête. votre rappel est probablement en cours avant que Flash Player ait initialisé l'API EI. essayez d'ajouter un délai dans le rappel, en retardant l'appel de votre fonction 'test'.

-1

var swf = navigator.appName.indexOf ("Microsoft")! = -1? fenêtre ["MySwf"]: document ["MySwf"];

+1

est-ce le document.getElementById ("MySwf"); c'est défectueux? pourquoi utiliser le document [MySwf] par opposition à document.getElementById ("MySwf"); – user379468

Questions connexes