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