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é :
- le XULRunner 1.8.0.4 pour Windows
- le fichier npswf32.dll qui est dans mon firefox à l'adresse
C:\Program Files\Mozilla Firefox\plugins pswf32.dll
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 :

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
1. Le samedi, janvier 27 2007, 09:38 par ekameleon
Hello :)
En fait avec Apollo qui arrive c'est clair que l'intégration dans XUL d'un swf peut devenir un peu moins intéressant. Sauf si l'on se base sur une application tournant sous FireFox par exemple.
J'ai pas regardé si XUL permet de gérer selon les OS au niveau du système ?
PS : quand tu dis qu'il faut bien préparer le XULRunner pour lire du flash8 tu peux préciser ? :)
PS : sur mac et linux la dll c'est la même ? Je pensais que les dll fonctionnaient que sous Windows ?
EKA+ :)
2. Le samedi, janvier 27 2007, 11:33 par neolao
Pour préparer le XULRunner, il faut télécharger le runner du système et choper ce qui gère les SWF. Evidemment, la DLL c'est que pour Windows.
Sur linux, c'est "libflashplayer.so" à mettre aussi dans "plugins". Sur Mac je sais pas encore.
C'est tout pour la préparation, l'application ne change pas.
3. Le samedi, janvier 27 2007, 14:44 par ekameleon
Hello :)
ok c'est bien ce que je pensais, j'ai pas de mac (pour le moment) et je vais installer dans pas longtemps sur une de mes machines un environnement sous Unbuntu. Cela me permettra de tester tout cela dans différents environnements. Reste à voir maintenant ce qu'il est possible de faire dans xulrunner au delà de juste afficher un swf :)
EKA+ :)
4. Le samedi, janvier 27 2007, 15:09 par neolao
tu demandes qu'est-ce qu'on peut faire sur XULRunner ?
ben Firefox par exemple, ou Thunderbird et plein d'autres choses.
Gestion des extensions, localisation et j'en passe.
Si tu sais coder les composants, tu peux tout faire.
En fait, la vraie question, c'est pourquoi afficher un SWF. Pour la vidéo, les animations, les mp3, des trucs animés chiants à faire autrement.
5. Le samedi, janvier 27 2007, 17:45 par ekameleon
Je cherchais l'utilité au niveau application indépendante mais il est clair qu'il est possible de faire un module Flash Media Server dans une extension firefox ou thunderbird aussi .. en effet on peut faire plein de truc du coup ^_^
Reste à voir dans l'avenir avec Tamarin si ce sera tjs ainsi ? Avec une virtual machine Mozilla basée sur celle de l'AS3 cela risque de faire bouger les choses au niveau des intéractions entre XUL et AS3.
EKA+ :)