Documentation Flash CS3 |
|||
| Programmation avec ActionScript 3.0 > La sécurité dans Flash Player > Chargement de contenu | |||
Un fichier SWF peut charger les types de contenu suivants :
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 sandboxes 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 inclut trois propriétés qui vous permettent de définir comment le contenu chargé sera utilisé :
checkPolicyFile : cette propriété est réservée au chargement d'un fichier image, pas d'un 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 interdomaine (voir Contrôles de site Web (fichiers de régulation interdomaine)). Si le serveur autorise l'accès au domaine Loader, le code ActionScript des fichiers SWF du domaine Loader peuvent 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() pour accéder aux pixels de l'image chargée. securityDomain : utilisez cette propriété uniquement pour le chargement d'un fichier SWF, pas pour une image. Spécifiez-la pour un fichier SWF issu d'un domaine autre que celui du fichier contenant l'objet Loader. Seules deux valeurs sont correctement prises en charge pour la propriété securityDomain : null (valeur 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 interdomaine se trouve sur le serveur du fichier SWF chargé, pour qu'il soit accessible au domaine du fichier SWF à l'origine de 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 avec ActionScript 3.0 (et non une image ou un fichier SWF écrit avec ActionScript 1.0 ou 2.0). Lors du chargement du fichier, vous pouvez spécifier s'il doit être placé dans un domain 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 domain 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 la classe ApplicationDomain.Pour plus d'informations, voir Spécification 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 Suivi de la progression du chargement..
En dehors des fichiers du sandbox local avec système de fichiers, tous les fichiers SWF sont autorisés à charger des sons et des vidéos en provenance d'un réseau grâce aux méthodes Sound.load(), NetConnection.connect() et NetStream.play().
Seuls les fichiers SWF locaux peuvent charger des médias du système de fichiers local. Seuls les fichiers du sandbox local avec système de fichiers et du sandbox local approuvé peuvent 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.
La balise <img> permet de charger des fichiers SWF et bitmap dans un champ 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'instance TextField, comme dans le code suivant :
var loadedObject:DisplayObject = myTextField.getImageReference('instanceName');
Notez cependant que les fichiers SWF et image 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 texte, l'accès aux données de l'image peut être autorisé par le biais du fichier de régulation interdomaine. 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 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 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 le Loader comme si vous aviez utilisé l'objet Loader dans ActionScript pour charger ce fichier. Dans ce cas, la méthode getImageReference() renvoie le 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 mettre en œuvre un fichier de régulation interdomaine ; 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().
Flash Media Server utilise le protocole RTMP (Real-Time Media Protocol) pour servir des données, des sons et des vidéos. Un fichier SWF charge ce type de média à l'aide de la méthode connect() de la classe NetConnection, en transmettant une URL RTMP comme 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, reportez-vous à la documentation Flash Media Server.
Pour les médias chargés à partir de sources RTMP, vous ne pouvez pas utiliser les méthodes BitmapData.draw() et SoundMixer.computeSpectrum() pour extraire les données image et son au moment de l'exécution.
Flash CS3
M'envoyer un message électronique lorsque des commentaires sont ajoutés à cette page | Rapport de commentaire
Page en cours: http://livedocs.adobe.com/flash/9.0_fr/main/00000353.html