2010-06-10 5 views
0

J'ai un problème avec mon ExternalInterface.Problème ExternalInterface sur le chargement avec FireFox

La façon dont il est actuellement configuré est, lors du chargement de la page, un booléen est défini sur vrai en JavaScript, puis vérifié par les constructeurs ActionScript (en utilisant un temporisateur) jusqu'à ce qu'il soit vrai. Cela indique que JavaScript est prêt à recevoir des appels de AS3. A ce stade, AS3 va ajouter le callback et faire des choses internes, et à la fin du constructeur j'appelle JavaScript. Jusqu'ici tout va bien. JavaScript appellera à ce stade une fonction dans AS3 (qui a été définie dans le rappel décrit ci-dessus), et c'est là que tout est en désordre.

Sur IE cela fonctionne parfaitement bien. Sur FireFox cependant, ce n'est pas le cas. Quand je le débogue, je vois que la fonction javascript est appelée mais quand il essaie d'appeler AS3, rien ne se passe. J'ai également essayé d'ajouter une minuterie, mais pour une raison quelconque, la fonction STILL s'exécute tout de suite (dans IE).

Ce qui est très étrange est qu'une seconde ou deux plus tard, cette fonction fonctionnera, il semble donc que le Flash n'est pas complètement chargé dans FireFox? Mais ça marche jusqu'à la dernière ligne de mon constructeur, donc je crois que c'est chargé.

EDIT: J'ai fait un try/catch, et JavaScript me donne un retour "TypeError: this.version n'est pas une fonction." Le deuxième appel à « version » fonctionne réellement:

Controller.init = function() { 
    try { 
     _mainController.getVersion(); // This one does not work 
    } 
    catch (err) { 
     error = err.toString(); 
    } 
} 


Controller.addFiles = function(JSON, numberOfFiles) { 
    alert(error); 

    try { 
     _mainController.getVersion(); // This one works 
    } 
    catch (err) { 
     alert(err.toString()); // This one is never called 
    } 
} 

Au cours init, qui est appelé à partir du constructeur en AS3, il va jeter l'erreur, mais plus tard si les appels JavaScript getVersion() de addfiles ça marche (exact même fonction).

Une idée s'il vous plaît, je suis vraiment coincé.

Merci beaucoup, Rudy

Répondre

0

Vous pouvez avoir plus de chance avec le Flash Ajax Bridge. Il est plus à l'écoute de permettre à JS de contrôler les fichiers AS3 afin qu'il puisse faire abstraction du processus de connexion entre différents navigateurs. Sachez que le plug-in de communication par navigateur est une source de souffrance dans le meilleur des cas.

+0

Je crois que c'est une condition de concurrence entre Flash et JavaScript maintenant. Merci pour votre réponse James. Malheureusement, je préfèrerais ne pas utiliser Ajax Bridge si possible. J'espère qu'il existe d'autres solutions, même si je n'ai encore rien trouvé. Merci. – Rudy

+0

Il peut toujours être intéressant d'examiner le code dans le pont Ajax, car il est tout disponible en open source. Vous pouvez voir comment ils résolvent votre problème car il a été testé sur les navigateurs que vous ciblez. –

+0

Oh d'accord, désolé je n'ai pas pensé à ça. Merci, je vais voir comment ils le font. – Rudy

Questions connexes