Hé, j'ai donc beaucoup de mal à faire fonctionner ExternalInterface, ce qui est bizarre, parce que je l'utilise assez souvent.ExternalInterface
J'espère que cela est quelque chose que je viens de manquer parce que je l'ai regardé trop longtemps.
La fonction flash_ready retourne correctement ObjectId, et pour autant que je peux dire, tout le reste est dans l'ordre.
Malheureusement, lorsque je l'exécute, j'obtiens une erreur (variant selon le navigateur) me disant que, fondamentalement, document.getElementById (<movename>
) .test() n'est pas une méthode valide.
Voici le code:
javascript:
function flash_ready(i){
document.getElementById(i).test('success!');
}
Intégrer Html (généré):
<script type="text/javascript">
swfobject.embedSWF("/chainmaille/includes/media/flash/upload_image.swf", "/chainmaille/includes/media/flash/upload_image", "500", "50", "9.0.0","expressInstall.swf", {}, {allowScriptAccess:'always', wmode:'transparent'},{id:'uploader_flash',name:'uploader_flash'});
</script>
<object type="application/x-shockwave-flash" id="uploader_flash" name="uploader_flash" data="/chainmaille/includes/media/flash/upload_image.swf" width="500" height="50"><param name="allowScriptAccess" value="always"><param name="wmode" value="transparent"></object>
AS3:
package com.jesseditson.uploader {
import flash.display.MovieClip;
import flash.external.ExternalInterface;
import flash.system.Security;
public class UI extends MovieClip {
// Initialization:
public function UI() {
Security.allowDomain('*');
ExternalInterface.addCallback("test", test);
var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');";
var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);");
navigateToURL(url, "_self");
}
public function test(t){
trace(t);
}
}
}
SWFObject est inclus via le code Google , et Le flash embarque très bien, donc ce n'est pas le problème.
J'ai une configuration très similaire travaillant sur un autre serveur, mais ne peut pas sembler le faire fonctionner sur celui-ci. C'est un serveur partagé Hostgator. Serait-ce la faute du serveur? Quelqu'un voit-il des problèmes de syntaxe évidents?
Merci d'avance!
ne pouvait-il que dans le temps d'appeler 'test (t)' il n'est pas défini? –
Eh bien, test (t) ne sera pas appelé tant que le flash n'est pas chargé, car la fonction flash_ready() est appelée depuis le flash lui-même. Je ne sais pas si cela a du sens, mais voici le flux: UI instancié -> constructeur (UI) -> flash_ready() appelé -> test() appelé Donc, flash appelle la fonction de test via javascript, donc test doit être défini. Ouais? – Jesse
Est-ce qu'il le fait dans tous les navigateurs? J'ai parfois des problèmes avec IE que je dois aplanir. –