Caricamento dinamico di contenuto di visualizzazione

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

È possibile caricare una delle seguenti risorse di visualizzazione esterne in un'applicazione ActionScript 3.0:

  • File SWF creato in ActionScript 3.0 (Sprite, MovieClip o qualsiasi altra classe che estenda Sprite).

  • File di immagine (inclusi file JPG, PNG e GIF).

  • File SWF AVM1 (file SWF scritto in ActionScript 1.0 o 2.0).

Per caricare queste risorse è necessario utilizzare la classe Loader.

Caricamento di oggetti di visualizzazione

Gli oggetti Loader vengono utilizzati per caricare file SWF e file di immagini nelle applicazioni. La classe Loader è una sottoclasse della classe DisplayObjectContainer. Un oggetto Loader può contenere nel proprio elenco di visualizzazione un solo oggetto di visualizzazione secondario, vale a dire l'oggetto di visualizzazione che rappresenta il file SWF o di immagine che carica. Quando aggiungete un oggetto Loader nell'elenco di visualizzazione (come illustrato nel codice seguente), viene aggiunto anche l'oggetto di visualizzazione secondario caricato:

var pictLdr:Loader = new Loader(); 
var pictURL:String = "banana.jpg" 
var pictURLReq:URLRequest = new URLRequest(pictURL); 
pictLdr.load(pictURLReq); 
this.addChild(pictLdr);

Una volta caricato il file SWF o l'immagine, potete spostare l'oggetto di visualizzazione caricato in un altro contenitore di oggetti di visualizzazione, come l'oggetto DisplayObjectContainer del contenitore nell'esempio seguente:

import flash.display.*; 
import flash.net.URLRequest; 
import flash.events.Event; 
var container:Sprite = new Sprite(); 
addChild(container); 
var pictLdr:Loader = new Loader(); 
var pictURL:String = "banana.jpg" 
var pictURLReq:URLRequest = new URLRequest(pictURL); 
pictLdr.load(pictURLReq); 
pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);  
function imgLoaded(event:Event):void 
{ 
    container.addChild(pictLdr.content);  
}

Monitoraggio dello stato di avanzamento del caricamento

Una volta avviato il caricamento del file, viene creato un oggetto LoaderInfo. L'oggetto LoaderInfo contiene informazioni che includono lo stato di avanzamento del caricamento, gli URL del loader e del contenuto caricato, il numero totale di byte del contenuto multimediale e l'altezza e larghezza nominali dello stesso. L'oggetto LoaderInfo invia inoltre eventi relativi al monitoraggio dello stato di avanzamento del caricamento.

Nel diagramma seguente sono illustrati i diversi usi dell'oggetto LoaderInfo: per l'istanza della classe principale del file SWF, per un oggetto Loader e per un oggetto caricato dall'oggetto Loader:

LoaderInfo è accessibile come una proprietà dell'oggetto Loader e dell'oggetto di visualizzazione caricato. Non appena il caricamento viene avviato, è possibile accedere all'oggetto LoaderInfo mediante la proprietà contentLoaderInfo dell'oggetto Loader. Al termine del caricamento dell'oggetto di visualizzazione, l'oggetto LoaderInfo risulta comunque accessibile come proprietà dell'oggetto di visualizzazione caricato mediante la proprietà loaderInfo dell'oggetto di visualizzazione. La proprietà loaderInfo dell'oggetto di visualizzazione caricato fa riferimento allo stesso oggetto LoaderInfo della proprietà contentLoaderInfo dell'oggetto Loader. In altre parole, un oggetto LoaderInfo è condiviso da un file di oggetto caricato e dall'oggetto Loader che lo ha caricato.

Per accedere alle proprietà del contenuto caricato, è necessario aggiungere un listener di evento all'oggetto LoaderInfo, come nel codice seguente:

import flash.display.Loader; 
import flash.display.Sprite; 
import flash.events.Event; 
 
var ldr:Loader = new Loader(); 
var urlReq:URLRequest = new URLRequest("Circle.swf"); 
ldr.load(urlReq); 
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); 
addChild(ldr); 
 
function loaded(event:Event):void 
{ 
    var content:Sprite = event.target.content; 
    content.scaleX = 2; 
}

Per ulteriori informazioni, vedete Gestione degli eventi.

Impostazione del contesto di caricamento

Quando caricate un file esterno in Flash Player mediante il metodo load() o loadBytes() della classe Loader, potete eventualmente specificare un parametro context. Tale parametro è un oggetto di 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). Se questa proprietà viene impostata su true, l'oggetto Loader cerca nel server di origine un file di criteri (vedete la sezione Controlli del sito Web (file di criteri)). Ciò è necessario unicamente per il contenuto proveniente da domini diversi da quello del file SWF contenente l'oggetto Loader. Se il server concede l'autorizzazione di accesso al dominio di Loader, ActionScript è in grado di accedere ai dati dell'immagine caricata dai file SWF presenti nel dominio di Loader; in altre parole, potete usare il comando BitmapData.draw() per accedere ai dati dell'immagine caricata.

    Notate che un file SWF appartenente a un dominio diverso da quello dell'oggetto Loader può chiamare il metodo Security.allowDomain() per consentire l'accesso a un dominio specifico.

  • 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. Se specificate questa opzione, Flash Player verifica l'esistenza di un file dei criteri dei domini e, se lo trova, consente ai file SWF dei domini autorizzati nel file dei criteri dei domini di eseguire scambi di script con il contenuto SWF caricato. Potete specificare flash.system.SecurityDomain.currentDomain per questo parametro.

  • 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 il file venga incluso nello stesso dominio applicazione dell'oggetto Loader impostando il parametro applicationDomain su flash.system.ApplicationDomain.currentDomain. L'inserimento del file SWF caricato nello stesso dominio dell'applicazione consente di accedere direttamente alle relative classi. Ciò può risultare utile se caricate un file SWF con contenuti multimediali incorporati, ai quali potrete accedere attraverso i relativi nomi di classi associati. Per ulteriori informazioni, vedete Operazioni con i domini applicazione.

Di seguito è riportato un esempio di controllo di un file di criterio nel corso del caricamento di una bitmap da un altro dominio:

var context:LoaderContext = new LoaderContext(); 
context.checkPolicyFile = true; 
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/photo11.jpg"); 
var ldr:Loader = new Loader(); 
ldr.load(urlReq, context);

Segue un esempio di verifica di un file dei criteri dei domini durante il caricamento di un file SWF da un altro dominio, al fine di collocare il file nella stessa funzione di sicurezza sandbox dell'oggetto Loader. Inoltre, il codice inserisce le classi del file SWF caricato nello stesso dominio applicazione dell'oggetto Loader:

var context:LoaderContext = new LoaderContext(); 
context.securityDomain = SecurityDomain.currentDomain; 
context.applicationDomain = ApplicationDomain.currentDomain; 
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/library.swf"); 
var ldr:Loader = new Loader(); 
ldr.load(urlReq, context);

Per ulteriori informazioni, vedete la classe LoaderContext in ActionScript 3.0 Reference for the Adobe Flash Platform (Guida di riferimento di Adobe ActionScript 3.0 per la piattaforma Adobe Flash).