2010-10-19 6 views
0

Je dois appeler la fonction javascript à partir de l'application Web Flash 4. Lorsque je l'exécute en mode débogage, il fonctionne parfaitement, mais lorsque je lance une version, exécute ou exécute la même application sur une autre machine, elle n'appelle pas la fonction JavaScript.Appel de la fonction JavaScript à partir de l'application Web Flex 4

Pour tester, j'appelle simplement la fonction d'alerte par exemple de JavaScript. Quelqu'un peut-il m'aider ce qui me manque?

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="vertical" initialize="application1_initializeHandler(event)" 
    verticalAlign="middle" 
    backgroundColor="white"> 

<mx:Script> 
    <![CDATA[ 
    import mx.controls.Alert; 
    import mx.events.FlexEvent; 
    public function btnLogin_click():void 
    { 
    var s:String;  
    if (ExternalInterface.available) 
    {  
     ExternalInterface.call("alert", "Hello World!"); 
    } 
    else 
    { 
    Alert.show("External interface not available"); 
    } 
    trace(s); 
    } 

    protected function application1_initializeHandler(event:FlexEvent):void 
    { 
    flash.system.Security.allowDomain("always"); 
    } 

    ]]> 
</mx:Script> 

<mx:Form>  
    <mx:FormItem>   
    <mx:Button id="btnLogin" label="Login" click="btnLogin_click()" />   
    </mx:FormItem>  
</mx:Form> 

</mx:Application> 
+0

Vous recevez une erreur? – JeffryHouser

Répondre

1

Eh bien, tout d'abord, assurez-vous que JavaScript sur votre machine d'essai est activée puis également vous assurer que vous ajoutez votre fichier JavaScript/code après le fichier de l'ajout.

J'ai eu un problème similaire mais cela a fonctionné quand j'ai déplacé swfobject.js au sommet de tous les js includes.

+0

Merci Faheem, je cours le code de débogage/libération sur la même machine. Et le mode débogage capable d'appeler JavaScript et le mode de libération ne peut pas appeler. En fait, pour tester, je n'ajoute aucun fichier JS. Appelez simplement la méthode JavaScript "alert" avec un paramètre. Mais toujours pas en cours d'exécution. Si quelqu'un peut reproduire le même problème, il sera vraiment utile. – FlexJogger

+0

Pourquoi ne pas essayer l'exemple de code ci-dessus sur une nouvelle machine qui ne dispose pas d'outils de débogage. J'ai essayé votre exemple de code en mode release et build, fonctionnant correctement. – Faheem

+0

Je reçois l'erreur suivante: SecurityError: Erreur # 2060: Violation du sandbox de sécurité: ExternalInterface appelant le fichier: /// C:/MSAPerMonWebClient/bin-release/MSAPerMonWebClient.swf ne peut pas accéder au fichier: /// C:/MSAPerMonWebClient/bin- release/MSAPerMonWebClient.html. \t à flash.external :: ExternalInterface $/_ initJS() \t à flash.external :: ExternalInterface $/appel() \t à MSAPerMonWebClient/btnLogin_click() \t à MSAPerMonWebClient/__ btnLogin_click() – FlexJogger

1

Avez-vous essayé un test comme (Flex):

ExternalInterface.call("alertFn"); 

Et JS:

function alertFn() { 
    alert("hello world"); 
} 

?

Je ne l'ai jamais essayé un appel ExternalInterface à une fonction native JS comme « alerte » ...

+0

Eh bien, le code que j'ai écrit fonctionne en mode débogage. Mais quand je fais une version, ne l'appelle pas JS. On dirait que c'est un problème de sécurité. Est-ce que vous pouvez exécuter le code ci-dessus dans le générateur Flex 4 et le valider? – FlexJogger

+0

Quelqu'un peut-il m'envoyer un projet de travail appelant la fonction JavaScript avec le code complet? – FlexJogger

+0

@FlexJogger, ce n'est pas la question de sécurité. Lorsque vous publiez build, votre javascript est remplacé par le nouveau wrapper HTML. Vous devez réécrire votre JS. –

0

Après avoir creusé le code d'erreur 2060 par

Alert.show(e.message) 

je me suis dit que pour une raison quelconque ExternalInterface.call ne fonctionne pas sur un file:// et les besoins http(s)://

Alors, tout le monde qui fait face à ce problème, obtenir votre vous un serveur Web (Apache) ou un GAE pour tester ce genre de choses et de vous sauver de la "Extreme time wastage":

I was having endless hours of problems using file:// with the Flex AJAX Bridge.

The AJAX code would fail silently during the SWF initialization callbacks to the AJAX code. I would then have null values for all of the SWF root elements.

As soon as I installed a web server and started using http:// localhost everything worked perfectly.

Extreme time wastage :(

0

test.mxml ..........

 protected function bt1_clickHandler(event:MouseEvent):void 
     { 

      // TODO Auto-generated method stub 
      ExternalInterface.call("callUnity"); 
     } 

.js ....

function callflex(){ 

alert("got it"); 
    } 
Questions connexes