Caricamento di contenuto

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Il contenuto Flash Player e AIR può caricare molti altri tipi di contenuto, compresi i seguenti:

  • File SWF

  • Immagini

  • Audio

  • Video

  • File HTML (solo AIR)

  • JavaScript (solo AIR)

Caricamento di file SWF e immagini con la classe Loader

Utilizzate la classe Loader per caricare file SWF e immagini (file JPG, GIF o PNG). Tutti i file SWF, eccetto quelli che si trovano nella sandbox locale con file system, possono caricare file SWF e di immagine di qualsiasi dominio di rete. Solo i file SWF contenuti nelle sandbox locali possono caricare file SWF e di immagine del file system locale. Tuttavia, i file nella sandbox locale con rete possono caricare unicamente file SWF locali che si trovano nella sandbox locale affidabile o locale con rete. I file SWF nella sandbox locale con rete possono caricare contenuto locale diverso da file SWF (quali immagini), tuttavia, essi non possono accedere ai dati del contenuto caricato.

Quando si carica un file SWF da un'origine non affidabile (ad esempio un dominio diverso da quello del file SWF principale dell'oggetto Loader), può essere opportuno definire una maschera per l'oggetto Loader, in modo da impedire che il contenuto caricato (che è un elemento secondario dell'oggetto Loader) possa essere disegnato in parti dello stage al di fuori della maschera, come nel codice seguente:

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);

Quando chiamate il metodo load() dell'oggetto Loader, potete specificare un parametro context , che è un oggetto LoaderContext. La classe LoaderContext include tre proprietà che consentono di definire il contesto di utilizzo del contenuto caricato:

  • checkPolicyFile : utilizzate questa proprietà solo per caricare file di immagine (non file SWF). Specificate questa proprietà per file di immagine appartenenti a un dominio differente da quello del file contenente l'oggetto Loader. Se questa proprietà viene impostata su true , l'oggetto Loader cerca nel server di origine un file di criteri degli URL (vedete Controlli del sito Web (file di criteri) ). Se il server concede l'autorizzazione di accesso al dominio Loader, i file SWF del dominio Loader possono accedere ai dati contenuti nell'immagine caricata. In altre parole, è possibile utilizzare la proprietà Loader.content per ottenere un riferimento all'oggetto Bitmap che rappresenta l'immagine caricata oppure il metodo BitmapData.draw() o BitmapData.drawWithQuality() per accedere ai pixel dell'immagine caricata. Il metodo drawWithQuality è disponibile in Flash Player 11.3 e versioni successive e in AIR 3.3 e versioni successive.

  • securityDomain : utilizzate questa proprietà solo per caricare file SWF (non file di immagine). Specificate questa proprietà per un file SWF appartenente a un dominio differente da quello del file contenente l'oggetto Loader. Per la proprietà securityDomain sono al momento supportati solo due valori: null (predefinito) e SecurityDomain.currentDomain . Se specificate SecurityDomain.currentDomain , il file SWF caricato viene importato nella stessa sandbox del file SWF che esegue il caricamento, ovvero funziona come se fosse stato caricato dallo stesso server del file SWF caricante. Ciò è consentito solo se nel server del file SWF caricato si trova un file di criteri degli URL che consente l'accesso da parte del dominio del file SWF che esegue il caricamento. Se il file di criteri non viene trovato, caricante e caricato possono scambiarsi liberamente script una volta avviato il caricamento, in quanto si trovano nella stessa sandbox. Tenete presente che l'importazione di sandbox può essere sostituita mediante l'esecuzione di un normale caricamento, quindi facendo in modo che il file SWF caricato chiami il metodo Security.allowDomain() . Quest'ultimo metodo potrebbe risultare più semplice da usare, in quanto il file SWF caricato si troverebbe nella propria sandbox e sarebbe in grado di accedere alle risorse presenti nel proprio server.

  • applicationDomain : utilizzate questa proprietà solo per il caricamento di un file SWF scritto in ActionScript 3.0 (non un'immagine o un file SWF scritto in ActionScript 1.0 o ActionScript 2.0). Quando caricate il file, potete specificare che venga collocato in un particolare dominio dell'applicazione, anziché, per impostazione predefinita, essere inserito nel dominio di una nuova applicazione, che è un dominio secondario del dominio dell'applicazione del file SWF che esegue il caricamento. Tenete presente che i domini di applicazione sono sottounità di domini di sicurezza, quindi è possibile specificare un dominio di applicazione di destinazione solo se il file SWF che si sta caricando appartiene al proprio dominio di sicurezza, o perché proviene dal proprio server o perché è stato importato nel proprio dominio di sicurezza mediante la proprietà securityDomain . Se specificate un dominio di applicazione ma il file SWF caricato fa parte di un diverso dominio di sicurezza, il dominio specificato in applicationDomain viene ignorato. Per ulteriori informazioni, vedete Operazioni con i domini applicazione .

Per informazioni dettagliate, vedete Impostazione del contesto di caricamento .

Un'importante proprietà dell'oggetto Loader è la proprietà contentLoaderInfo , che è un oggetto LoaderInfo. A differenza della maggior parte degli oggetti, l'oggetto LoaderInfo viene condiviso tra il file SWF che carica e il contenuto caricato ed è sempre accessibile da entrambe le parti. Se il contenuto caricato è un file SWF, esso può accedere all'oggetto LoaderInfo mediante la proprietà DisplayObject.loaderInfo . Gli oggetti LoaderInfo includono informazioni quali stato di avanzamento del caricamento, URL di caricante e caricato, relazione di affidabilità tra caricante e caricato e altre informazioni. Per ulteriori informazioni, vedete Monitoraggio dello stato di avanzamento del caricamento .

Caricamento di audio e video

Tutto il contenuto, ad eccezione di quello nella sandbox locale con file system, può caricare audio e video da origini di rete mediante i metodi Sound.load() , NetConnection.connect() e NetStream.play() .

Solo il contenuto nelle sandbox locali con file system e dell'applicazione AIR può caricare file multimediali dal file system locale. Solo il contenuto nella sandbox locale con file system, nella sandbox dell'applicazione AIR o nella sandbox locale affidabile può accedere ai dati in questi file caricati.

Esistono altre restrizioni relative all'accesso ai dati dei file multimediali caricati. Per ulteriori informazioni, vedete Accesso a file multimediali caricati come dati

Caricamento di file SWF e di immagini mediante il tag <img> in un campo di testo

È possibile caricare file SWF e bitmap in campi di testo mediante il tag <img> , come illustrato dal codice seguente:

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

Per accedere al contenuto caricato in questo modo, utilizzate il metodo getImageReference() dell'istanza TextField, come nel codice seguente:

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

Notate, tuttavia, che i file SWF e le immagini caricate in questo modo vengono inseriti nella sandbox corrispondente alla rispettiva origine.

Quando caricate un file immagine utilizzando un tag <img> in un campo di testo, l'accesso ai dati di tale file può essere autorizzato da un file di criteri degli URL. Per verificare la presenza di un file di criteri, aggiungete l'attributo checkPolicyFile al tag <img> , come nel codice seguente:

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

Quando caricate un file SWF mediante un tag <img> in un campo di testo, potete consentire l'accesso ai dati di tale file SWF chiamando il metodo Security.allowDomain() .

Quando utilizzate un tag <img> in un campo di testo per caricare un file esterno (anziché utilizzare una classe Bitmap incorporata al file SWF), viene automaticamente creato un oggetto Loader come elemento secondario dell'oggetto TextField e il file esterno viene caricato nel Loader come se fosse stato caricato in ActionScript mediante l'oggetto Loader. In questo caso, il metodo getImageReference() restituisce l'oggetto Loader creato automaticamente. Non è necessaria alcuna verifica di sicurezza per accedere a questo Loader poiché si trova nella stessa sandbox di sicurezza del codice chiamante.

Tuttavia, quando fate riferimento alla proprietà content dell'oggetto Loader per accedere ai contenuti multimediali caricati, le regole di sicurezza vengono applicate. Se il contenuto è un'immagine, dovete implementare un file di criteri degli URL, mentre se il contenuto è un file SWF, è necessario che il codice del file chiami il metodo allowDomain() .

Adobe AIR

Nella sandbox dell'applicazione, i tag <img> in un campo di testo vengono ignorati per impedire attacchi di phishing. Inoltre, il codice in esecuzione nella sandbox dell'applicazione non può chiamare il metodo allowDomain() della classe Security.

Contenuto distribuito mediante server RTMP

Flash Media Server impiega il protocollo RTMP (Real-Time Media Protocol) per gestire dati, audio e video. Potete caricare questi file multimediali mediante il metodo connect() della classe NetConnection, passando un URL RTMP come parametro. Flash Media Server è in grado di limitare le connessioni e impedire lo scaricamento di contenuto, in base al dominio del file richiedente. Per informazioni dettagliate, vedete la documentazione Flash Media Server in linea all'indirizzo www.adobe.com/go/learn_fms_docs_it .

Per utilizzare i metodi BitmapData.draw() , BitmapData.drawWithQuality() e SoundMixer.computeSpectrum() per estrarre dati audio e di immagine in fase di runtime da flussi RTMP, dovete consentire l'accesso sul server. Utilizzate le proprietà Client.videoSampleAccess e Client.audioSampleAccess ActionScript lato server per consentire l'accesso a directory specifiche su Flash Media Server. Per ulteriori informazioni, vedete la Guida di riferimento di ActionScript lato server . Il metodo drawWithQuality è disponibile in Flash Player 11.3 e versioni successive e in AIR 3.3 e versioni successive.