Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

27sept/090

Flex Tips – Embarquer un fichier JavaScript dans un SWF (Embed)

Voici une technique très intéressante permettant d'embarquer (embedding) un fichier JS dans un SWF pour pouvoir ensuite appeler des fonctions JS qui vont réagir avec le conteneur HTML. J'ai découvert cette technique ce matin (comme quoi on en apprend tous les jours) sur le blog de Kenny Bunch.

Cela peut être très intéressant pour des applications embarquées (comme les players Youtube & co). Dans ce cas-là, on ne peut pas modifier la page qui va accueillir le SWF pour rajouter une balise <script>, il faut donc trouver une autre solution.

La solution de Kenny Bunch est en fait plutôt simple et consiste à embarquer le fichier JS comme une ressources binaire grâce au metatag Embed.  Cette ressource est conservée dans un objet de type Class. Il suffit ensuite d'instancier cette Class, de récupérer la représentation en String de cette instance, et envoyer cette String à la page en utilisant un eval JavaScript.

Voici un exemple d'utilisation de cette technique. On a un fichier JS "hello.js" qui contient une fonction hello qui fait simplement un alert JS:

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

Créons maintenant le fichier ActionScript qui va embarquer le JS dans le SWF, l'écrire dans la page et appeler la fonction hello:

package
{
	import flash.display.Sprite;
	import flash.external.ExternalInterface;
	public class EmbeddedJavaScriptExample extends Sprite
	{
		// embed the JavaScript into the SWF
		[Embed(source="hello.js", mimeType="application/octet-stream")]
		// create a class that can instantiate the JavaScript for embedding
		private static const HelloJS:Class;
		public function EmbeddedJavaScriptExample()
		{
			if (ExternalInterface.available)
			{
				// embed the JavaScript to the page
				ExternalInterface.call("eval", new HelloJS().toString());
				// the embedded JavaScript has a function call named hello
				// now that it has been embedded to the page call it
				ExternalInterface.call("hello");
			}
		}
	}
}
24juin/080

Flex External Interface – Intégrer du HTML et un formulaire Flex

Dans certains cas, vous voudrez afficher la majorité d'un formulaire en HTML mais vous voulez aussi utiliser des composants Flex pour un ou plusieurs éléments du formulaire. Par exemple vous voulez utiliser des sliders, des ColorPicker, ou comme dans cet exemple, un calendrier.

Dans cet exemple simple, vous allez créer un formulaire HTML simple avec une CheckBox et une petite application Flex embarquée. L'application Flex consiste en un composant DateChooser. La CheckBox déactive ou active simplement le DateChooser. De plus, cela met en évidence la nature synchrone d'ExternalInterface: l'application Flex fait une requête à la page HTML pour avoir un tableau des dates désactivées, qui seront désactivées dans le DateChooser.

23juin/080

Flex External Interface – Changer le statut du Navigateur (exemple JS)

ExternalInterface peut sembler un peu complexe jusqu'à ce que l'on voit un ou deux exemples. Cet exemple vous permettra d'y voir plus clair. Cette application permet simplement à une application Flex d'appeler un JavaScript dans le navigateur qui contient le SWF pour changer le message de la barre de statut quand l'utilisateur passe au dessus (rollover) d'un bouton Flex.

Firefox désactive l'accès JavaScript à window.status par défaut, c'est pourquoi cet exemple peut ne pas fonctionner avec la configuration par défaut de Firefox.

Remplis sous: Exemple Lire la suite
23juin/080

Flex External Interface – Utilisation générale d'ExternalInterface

La classe flash.external.ExernalInterface définit deux méthodes static, appelées call() et addCallback(), qui permettent la communication Flex vers host-application et host-application vers Flex respectivement.

La méthode call() vous permet d'appeler une méthode de l'application sur laquelle se trouve l'application Flex (host application) en lui passant le nom d'une méthode. Si l'host-application attend des paramètres, vous pouvez les passer dans la méthode call() après le nom de la méthode à appeler. Par exemple, le code suivant appelle la fonction JavaScript alert() quand l'application Flex est lancée depuis un navigateur web:

ExternalInterface.call("alert", "Message de test depuis Flex");

La méthode call() marche de manière synchrone. Par exemple, la fonction JavaScript confirm() crée une nouvelle boîte de dialogue avec les boutons OK et Cancel. Cette boite de dialogue confirm met l'application en pause jusqu'à ce que l'utilisateur clique sur un bouton, et retourne true (OK) ou false (Cancel).

var option:Boolean = ExternalInterface.call("confirm", "Voulez vous vraiment fermer l'application?");

Bien sûr, les fonctions de l'host application peuvent être des fonctions personnalisées.