SWF-inhoud insluiten in HTML

Adobe AIR 1.0 of hoger

In een AIR-toepassing kunt u SWF-inhoud insluiten in HTML-inhoud, net zoals in een browser. Sluit de SWF-inhoud in met behulp van de tag object , de tag embed of beide.

Opmerking: Vaak wordt zowel de tag object als de tag embed gebruikt om SWF-inhoud weer te geven in een HTML-pagina. Deze techniek biedt echter geen voordelen in AIR. U kunt de W3C-standaard tag object op zichzelf gebruiken in inhoud die in AIR moet worden weergegeven. U kunt ook desgewenst de tags object en embed samen blijven gebruiken voor HTML-inhoud die ook in een browser wordt weergegeven.

Als u transparantie hebt ingeschakeld in het NativeWindow-object waarin de HTML- en SWF-inhoud wordt weergegeven, geeft AIR de SWF-inhoud niet weer wanneer de voor het insluiten van de inhoud gebruikte venstermodus ( wmode ) is ingesteld op de waarde window . Als u SWF-inhoud wilt weergeven in een HTML-pagina van een transparant venster, stelt u de parameter wmode in op opaque of transparent . window is de standaardwaarde voor wmode . Als u dus geen waarde opgeeft, is het mogelijk dat uw inhoud niet wordt weergegeven.

In het volgende voorbeeld ziet u hoe u de HTML-tag object gebruikt om een SWF-bestand in HTML-inhoud weer te geven. De parameter wmode is ingesteld op opaque , zodat de inhoud wordt weergegeven, ook als het onderliggende NativeWindow-object transparant is. Het SWF-bestand wordt vanuit de toepassingsmap geladen maar u kunt een willekeurig URL-schema gebruiken dat door AIR wordt ondersteund. (De bronlocatie van het SWF-bestand bepaalt de beveiligingssandbox waarin AIR de inhoud plaatst.)

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

U kunt ook een script gebruiken om inhoud dynamisch te laden. In het volgende voorbeeld ziet u hoe u een object -knooppunt maakt om het SWF-bestand weer te geven dat is opgegeven in de parameter urlString . Het voorbeeld voegt het knooppunt toe als onderliggend element van het pagina-element met de id die is opgegeven met de parameter 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>

SWF-inhoud wordt niet weergegeven als het HTMLLoader-object geschaald of geroteerd is of als de eigenschap alpha is ingesteld op een andere waarde dan 1.0. Vóór AIR 1.5.2 werd SWF-inhoud niet weergegeven in een transparant venster, ongeacht de voor wmode ingestelde waarde.

Opmerking: Wanneer een ingesloten SWF-object probeert een extern element te laden, zoals een videobestand, is het mogelijk dat de SWF-inhoud niet op de juiste wijze wordt gerenderd wanneer geen absoluut pad naar het videobestand wordt aangegeven in het HTML-bestand. Een ingesloten SWF-object kan echter wel een extern afbeeldingsbestand laden met gebruik van een relatief pad.

Aan de hand van het volgende voorbeeld wordt geïllustreerd hoe externe elementen kunnen worden geladen via een SWF-object dat is ingesloten in HTML-inhoud:

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

In het volgende ActionScript-voorbeeld wordt het door het HTML-bestand doorgegeven afbeeldingspad gelezen en wordt de afbeelding geladen in het werkgebied:

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