Flash dans XUL

Flash dans XUL Il fallait bien que j’essaye d’intégrer du Flash dans du XUL et que ça communique. C’est chose faite.

Préparer le XULRunner

Tout d’abord, j’ai récupéré :

Cette DLL sert à afficher les SWF, la mienne est un Flash Player 9. Je l’ai mis dans dossier_xulrunner/plugins/.

Voilà, mon XULRunner est prêt.

Créer une application XUL

Ce qui est en fond blanc, c’est du Flash :

Aperçu

La partie importante, c’est ça :

<html:object id="flash" type="application/x-shockwave-flash" data="test.swf" width="350" height="300">
    <html:param name="allowScriptAccess" value="always" />
</html:object>

J’ai simplement déclaré le namespace xmlns:html="http://www.w3.org/1999/xhtml" et utilisé la balise <object> comme dans une page HTML, sans oublier le allowScriptAccess nécessaire pour la communication.

Et le Javascript :

function send()
{
    var myFlash = document.getElementById("flash");
    var myCommand = document.getElementById("command");
    myFlash.sendMessageToFlash(myCommand.value);
}
function getMessageFromFlash(pMessage)
{
    alert("From Flash : "+pMessage);
}

Là vous voyez qu’on lance carrément une fonction sur l’élément HTML. C’est possible depuis les fameux ExternalInterface de Flash 8. Sinon il y a bien l’ancienne méthode Javascript mais depuis que Linux a son Flash Player 9, on s’en fout :) .

Création du Flash

Je compile donc en Flash 8 avec mtasc.

Flash lance une fonction javascript en faisant :

ExternalInterface.call("getMessageFromFlash", "coucou");

Par contre, pour que Javascript lance une fonction Flash, il faut la déclarer :

ExternalInterface.addCallback("sendMessageToFlash", this, this.la_fonction);

Conclusion

La communication se fait bien. J’arrive à lancer une fonction Flash depuis Javascript avec un paramètre et inversement. Ca marche sur Windows, Mac et Linux à condition de bien préparer le XULRunner pour lire du Flash 8.

Je n’ai pas vraiment réfléchi à quoi ça pourrait me servir, mais vous devriez avoir des idées, futés comme vous êtes :) .

Flash pourrait exploiter les XPCOM, utiliser une base SQLite, accéder au disque, etc. Bref, le Apollo du pauvre lol. Quoique …

Télécharger les sources (600ko, Il y a tout sauf le XULRunner)

Commentaires