Incorporamento del contenuto SWF nel contenuto HTML

Adobe AIR 1.0 e versioni successive

Potete incorporare il contenuto SWF nel contenuto HTML all'interno di un'applicazione AIR come se si trattasse di un browser. Incorporate il contenuto SWF usando un tag object , un tag embed o entrambi.

Nota: nella programmazione Web si usa in genere sia un tag object che un tag embed per visualizzare il contenuto SWF in una pagina HTML. Questa pratica non comporta alcun vantaggio in AIR. Potete usare il tag object dello standard W3C da solo nel contenuto da visualizzare in AIR. Allo stesso tempo, potete continuare a usare i tag object ed embed insieme, se necessario, anche per il contenuto HTML da visualizzare in un browser.

Se avete abilitato la trasparenza nell'oggetto NativeWindow che visualizza il contenuto HTML e SWF, AIR non visualizza il contenuto SWF quando la modalità finestra ( wmode ) utilizzata per incorporare il contenuto è impostata sul valore: window . Per visualizzare il contenuto SWF in una pagina HTML di una finestra trasparente, impostate il parametro wmode su opaque o transparent . window è il valore predefinito per wmode , pertanto se non specificate un valore, è possibile che il contenuto non venga visualizzato.

Nel seguente esempio viene mostrato l'uso del tag object HTML per visualizzare un file SWF all'interno del contenuto HTML. Il parametro wmode è impostato su opaque in modo che il contenuto venga visualizzato, anche se l'oggetto NativeWindow sottostante è trasparente. Il file SWF viene caricato da una directory dell'applicazione, ma potete usare qualunque schema URL supportato da AIR. La posizione dalla quale viene caricato il file SWF determina la sandbox di sicurezza in cui AIR colloca il contenuto.

<object type="application/x-shockwave-flash" width="100%" height="100%"> 
    <param name="movie" value="app:/SWFFile.swf"></param> 
    <param name="wmode" value="opaque"></param> 
</object>

Potete anche usare uno script per caricare il contenuto dinamicamente. Nell'esempio seguente viene caricato un nodo object per visualizzare il file SWF specificato nel parametro urlString . Nell'esempio il nodo viene aggiunto come elemento secondario dell'elemento pagina con l'ID specificato dal parametro elementID :

<script> 
function showSWF(urlString, elementID){ 
    var displayContainer = document.getElementById(elementID); 
    var flash = createSWFObject(urlString, 'opaque', 650, 650); 
    displayContainer.appendChild(flash); 
} 
function createSWFObject(urlString, wmodeString, width, height){ 
    var SWFObject = document.createElement("object"); 
    SWFObject.setAttribute("type","application/x-shockwave-flash"); 
    SWFObject.setAttribute("width","100%"); 
    SWFObject.setAttribute("height","100%"); 
    var movieParam = document.createElement("param"); 
    movieParam.setAttribute("name","movie"); 
    movieParam.setAttribute("value",urlString); 
    SWFObject.appendChild(movieParam); 
    var wmodeParam = document.createElement("param"); 
    wmodeParam.setAttribute("name","wmode"); 
    wmodeParam.setAttribute("value",wmodeString); 
    SWFObject.appendChild(wmodeParam);      
    return SWFObject; 
} 
</script>

Il contenuto SWF non è visualizzato se l'oggetto HTMLLoader viene ridimensionato o ruotato, o se la proprietà alpha è impostata su un valore diverso da 1.0. Nelle versioni precedenti a AIR 1.5.2, il contenuto SWF non era visualizzato in una finestra trasparente, a prescindere dall'impostazione del valore wmode .

Nota: quando un oggetto SWF incorporato tenta di caricare una risorsa esterna, ad esempio un file video, è possibile che il rendering del contenuto SWF non sia corretto se nel file HTML non viene fornito un percorso assoluto del file. Tuttavia, un oggetto SWF incorporato può caricare un file di immagine esterno utilizzando un percorso relativo.

Il seguente esempio illustra come è possibile caricare risorse esterne mediante un oggetto SWF incorporato in un contenuto HTML:

    var imageLoader; 
     
    function showSWF(urlString, elementID){ 
        var displayContainer = document.getElementById(elementID); 
        imageLoader = createSWFObject(urlString,650,650); 
        displayContainer.appendChild(imageLoader); 
    } 
 
    function createSWFObject(urlString, width, height){ 
    
        var SWFObject = document.createElement("object"); 
            SWFObject.setAttribute("type","application/x-shockwave-flash"); 
            SWFObject.setAttribute("width","100%"); 
            SWFObject.setAttribute("height","100%"); 
             
        var movieParam = document.createElement("param"); 
            movieParam.setAttribute("name","movie"); 
            movieParam.setAttribute("value",urlString); 
            SWFObject.appendChild(movieParam); 
             
        var flashVars = document.createElement("param"); 
            flashVars.setAttribute("name","FlashVars");    
    
        //Load the asset inside the SWF content. 
            flashVars.setAttribute("value","imgPath=air.jpg");    
            SWFObject.appendChild(flashVars); 
    
        return SWFObject; 
    } 
    function loadImage() 
    { 
      showSWF("ImageLoader.swf", "imageSpot"); 
      
    }

Nell'esempio ActionScript seguente, il percorso immagine passato al file HTML viene letto e l'immagine caricata sullo stage:

package 
{ 
      import flash.display.Sprite; 
      import flash.display.LoaderInfo; 
      import flash.display.StageScaleMode; 
      import flash.display.StageAlign; 
      import flash.display.Loader; 
      import flash.net.URLRequest; 
      
      public class ImageLoader extends Sprite 
      { 
            public function ImageLoader() 
            { 
                  
                  var flashvars = LoaderInfo(this.loaderInfo).parameters; 
                  
                  if(flashvars.imgPath){ 
                        var imageLoader = new Loader(); 
                        var image = new URLRequest(flashvars.imgPath); 
                        imageLoader.load(image); 
                        addChild(imageLoader); 
                        imageLoader.x = 0; 
                        imageLoader.y = 0; 
                        stage.scaleMode=StageScaleMode.NO_SCALE;                    
                        stage.align=StageAlign.TOP_LEFT; 
                  } 
            } 
      } 
}