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 :
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.)
|
|
|
|
|