Chargement de contenu

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Le contenu Flash Player et AIR peut charger un grand nombre de types de contenus, notamment :

  • Fichiers SWF

  • Images

  • Son

  • Vidéo

  • Fichiers HTML (AIR uniquement)

  • JavaScript (AIR uniquement)

Chargement d’images et de fichiers SWF à l’aide de la classe Loader

La classe Loader permet de charger des fichiers SWF et des images (fichiers JPG, GIF ou PNG). Un fichier SWF, s’il ne se trouve pas dans le sandbox local avec système de fichiers, peut charger des fichiers SWF et des images depuis n’importe quel domaine réseau. Seuls les fichiers SWF associés aux sandbox locaux peuvent charger des fichiers SWF et des images issus du système de fichiers local. Cependant, les fichiers du sandbox local avec réseau peuvent uniquement charger des fichiers SWF locaux qui se trouvent dans le sandbox local approuvé ou avec réseau. Les fichiers SWF associés au sandbox local avec réseau peuvent charger du contenu autre que des fichiers SWF (par exemple des images), mais ne peuvent pas accéder aux données du contenu chargé.

Lorsque vous chargez un fichier SWF d’une source non approuvée (telle qu’un domaine autre que celui du fichier SWF racine de l’objet Loader), il peut s’avérer utile de définir un masque pour ce dernier, afin d’empêcher le contenu chargé, qui est un enfant de l’objet Loader, d’apparaître dans des parties de la scène qui ne relèvent pas de ce masque, comme illustré par le code suivant :

import flash.display.*; 
import flash.net.URLRequest; 
var rect:Shape = new Shape(); 
rect.graphics.beginFill(0xFFFFFF); 
rect.graphics.drawRect(0, 0, 100, 100); 
addChild(rect); 
var ldr:Loader = new Loader(); 
ldr.mask = rect; 
var url:String = "http://www.unknown.example.com/content.swf"; 
var urlReq:URLRequest = new URLRequest(url); 
ldr.load(urlReq); 
addChild(ldr);

Lorsque vous appelez la méthode load() de l’objet Loader, vous pouvez spécifier un paramètre context, qui constitue un objet LoaderContext. La classe LoaderContext comporte trois propriétés qui permettent de définir le contexte d’utilisation du contenu chargé :

  • checkPolicyFile : utilisez cette propriété uniquement pour le chargement d’un fichier image (pas pour un fichier SWF). Spécifiez-la pour un fichier image issu d’un domaine autre que celui du fichier contenant l’objet Loader. Si vous définissez cette propriété sur true, Loader recherche sur le serveur d’origine un fichier de régulation d’URL (voir Contrôles de site Web (fichiers de régulation)). Si le serveur autorise l’accès au domaine Loader, le code ActionScript des fichiers SWF du domaine Loader peut accéder à l’image chargée. En d’autres termes, vous pouvez utiliser soit la propriété Loader.content pour obtenir une référence à un objet Bitmap qui représente l’image chargée, soit la méthode BitmapData.draw() ou la méthode BitmapData.drawWithQuality() pour accéder aux pixels de l’image chargée. La méthode drawWithQuality est disponible dans Flash Player 11.3 et les versions ultérieures et dans AIR 3.3 et les versions ultérieures.

  • securityDomain : utilisez cette propriété uniquement pour le chargement d’un fichier SWF (pas pour une image). Cette propriété peut être appelée pour un fichier SWF provenant d’un autre domaine que celui du fichier qui contient l’objet Loader. Seules les deux valeurs suivantes sont actuellement prises en charge par la propriété securityDomain : null (par défaut) et SecurityDomain.currentDomain. Si vous spécifiez SecurityDomain.currentDomain, le fichier SWF chargé est importé sur demande dans le sandbox du fichier SWF à l’origine du chargement. Par conséquent le fichier fonctionne comme s’il avait été chargé à partir du serveur du fichier appelant. Cette opération n’est permise que si le fichier de régulation d’URL se trouve sur le serveur du fichier SWF chargé, pour qu’il soit accessible au domaine du fichier SWF à l’origine du chargement. Si le fichier nécessaire est détecté, les deux fichiers peuvent librement effectuer une programmation croisée dès le début du chargement, puisqu’ils se trouvent dans le même sandbox. Notez que l’importation dans le sandbox peut presque être remplacée par un chargement ordinaire suivi d’un appel du fichier SWF chargé à la méthode Security.allowDomain(). Cette dernière peut s’avérer plus simple à utiliser puisque le fichier SWF chargé se trouve alors dans son sandbox naturel, pouvant ainsi accéder aux ressources de son propre serveur.

  • applicationDomain : utilisez cette propriété uniquement lors du chargement d’un fichier SWF écrit dans ActionScript 3.0 (et non une image ou un fichier SWF écrit dans ActionScript 1.0 ou 2.0). Lors du chargement du fichier, vous pouvez spécifier s’il doit être placé dans un domaine d’application particulier, plutôt que dans le domaine par défaut, c’est-à-dire un nouveau domaine créé comme enfant du domaine d’application du fichier SWF à l’origine du chargement. Notez que les domaines d’application sont des sous-ensembles des domaines de sécurité. Ainsi, vous pouvez uniquement spécifier un domaine d’application cible si le fichier SWF chargé provient de votre propre de domaine de sécurité, soit parce qu’il appartient à votre propre serveur, soit parce que vous l’avez importé dans votre domaine de sécurité à l’aide de la propriété securityDomain. Si vous spécifiez un domaine d’application mais que le fichier SWF chargé fait partie d’un domaine de sécurité différent, le domaine que vous spécifiez dans applicationDomain est ignoré. Pour plus d’informations, voir Utilisation de domaines d’application.

Pour plus d’informations, voir Définition du contexte de chargement.

L’objet Loader possède une importante propriété, contentLoaderInfo, qui constitue un objet LoaderInfo. Contrairement à la plupart des objets, un objet LoaderInfo est partagé entre le fichier SWF à l’origine du chargement et le contenu chargé. Il est en outre accessible par les deux parties. Si le contenu chargé est un fichier SWF, il peut accéder à l’objet LoaderInfo au moyen de la propriété DisplayObject.loaderInfo. Les objets LoaderInfo incluent des informations telles que la progression du chargement, l’URL du fichier de chargement et du fichier chargé, la relation de confiance entre ces deux fichiers, et d’autres renseignements. Pour plus d’informations, voir Surveillance de la progression du chargement.

Chargement de sons et vidéos

En dehors du contenu du sandbox local avec système de fichiers, tout contenu est autorisé à charger des éléments audio et vidéo en provenance d’un réseau grâce aux méthodes Sound.load(), NetConnection.connect() et NetStream.play().

Seul le contenu du sandbox local avec système de fichiers et du sandbox d’application AIR peut charger des fichiers multimédias issus du système de fichiers local. Seul le contenu du sandbox local avec système de fichiers, du sandbox d’application AIR ou du sandbox approuvé localement peut accéder aux données de ces fichiers chargés.

D’autres restrictions s’appliquent à l’accès aux données à partir d’un média chargé. Pour plus d’informations, voir Accès aux médias chargés comme s’il s’agissait de données.

Chargement de fichiers SWF et d’images à l’aide de la balise <img> d’un champ de texte

La balise <img> permet de charger des fichiers SWF et bitmap dans un champ de texte, comme le montre le code suivant :

<img src = 'filename.jpg' id = 'instanceName' >

Pour accéder au contenu chargé de cette manière, utilisez la méthode getImageReference() de l’occurrence de TextField, comme dans le code suivant :

var loadedObject:DisplayObject = myTextField.getImageReference('instanceName');

Notez cependant que les fichiers SWF et images chargés de cette manière sont placés dans le sandbox correspondant à leur origine.

Lorsque vous chargez un fichier image à l’aide de la balise <img> d’un champ de texte, l’accès aux données de l’image peut être autorisé par le biais d’un fichier de régulation d’URL. Vous pouvez vérifier l’existence d’un tel fichier en ajoutant l’attribut checkPolicyFile à la balise <img>, comme le montre le code suivant :

<img src = 'filename.jpg' checkPolicyFile = 'true' id = 'instanceName' >

Lorsque vous chargez un SWF à l’aide de la balise <img> d’un champ de texte, vous pouvez autoriser l’accès aux données de ce fichier SWF via un appel à la méthode Security.allowDomain().

Si vous utilisez la balise <img> d’un champ de texte pour charger un fichier externe (plutôt que d’incorporer une classe Bitmap dans votre fichier SWF), un objet Loader est automatiquement créé comme enfant de l’objet TextField et le fichier externe est chargé dans l’objet Loader comme si vous aviez utilisé un tel objet en ActionScript pour charger ce fichier. Dans ce cas, la méthode getImageReference() renvoie l’objet Loader automatiquement créé. Aucune vérification de sécurité n’est nécessaire pour charger cet objet Loader car il se trouve dans le même sandbox de sécurité que le code appelant.

Toutefois, si vous faites référence à la propriété content de l’objet Loader pour accéder au média chargé, des règles de sécurité s’appliquent. Si le contenu est une image, vous devez implémenter un fichier de régulation d’URL ; s’il s’agit d’un fichier SWF, vous devez modifier le code de ce fichier de manière qu’il appelle la méthode allowDomain().

Adobe AIR

Dans le sandbox de l’application, les balises <img> d’un champ de texte sont ignorées pour empêcher les attaques d’hameçonnage. Par ailleurs, le code exécuté dans le sandbox de l’application n’est pas autorisé à appeler la méthode de sécurité allowDomain().

Contenu diffusé à l’aide de serveurs RTMP

Flash Media Server utilise le protocole RTMP (Real-Time Media Protocol) pour servir des données, des sons et des vidéos. Vous pouvez charger ces données multimédias par le biais de la méthode connect() de la classe NetConnection, en transmettant une URL RTMP en tant que paramètre. Flash Media Server peut restreindre les connexions et empêcher le téléchargement du contenu, selon le domaine du fichier requis. Pour plus d’informations, voir la documentation de Flash Media Server disponible en ligne à l’adresse suivante : www.adobe.com/go/learn_fms_docs_fr.

Pour extraire des graphiques d’exécution et des données audio de flux RTMP par le biais des méthodes BitmapData.draw(), BitmapData.drawWithQuality() et SoundMixer.computeSpectrum() , vous devez autoriser l’accès au serveur. Les propriétés ActionScript côté serveur Client.videoSampleAccess et Client.audioSampleAccess permettent d’accéder à des répertoires spécifiques de Flash Media Server. Pour plus d’informations, voir le Guide de référence ActionScript de Flash Media Server côté serveur. (La méthode drawWithQuality est disponible dans Flash Player 11.3 et les versions ultérieures et dans AIR 3.3 et les versions ultérieures.)