Você pode incorporar o conteúdo SWF em um conteúdo HTML do aplicativo do AIR da mesma forma que em um navegador. Incorpore o conteúdo SWF usando a tag
object
, a tag
embed
ou as duas.
Nota:
Uma prática comum de desenvolvimento é usar tanto uma tag
object
quanto uma tag
embed
para exibir conteúdo SWF em uma página HTML. Essa prática não tem nenhum benefício no AIR. Você pode usar a própria tag
object
padrão W3C no conteúdo para ser exibido no AIR. Ao mesmo tempo, você pode continuar usando as tags
object
e
embed
juntas, se necessário, para conteúdo HTML exibido também no navegador.
Se você habilitou a transparência no objeto NativeWindow exibindo o conteúdo HTML e SWF, o AIR não exibe o conteúdo SWF quando o modo janela (
wmode
) utilizado para integrar o conteúdo estiver definido em:
window
. Para exibir o conteúdo do SWF em uma página HTML de uma janela transparente, configure o parâmetro
wmode
para
opaque
ou
transparent
.
window
é o valor padrão para
wmode
, de forma que o conteúdo pode não ser exibido se você não especificar o valor.
O seguinte exemplo ilustra o uso da tag
object
HTML para exibir um arquivo SWF no conteúdo HTML. O parâmetro
wmode
está definido para
opaque
de forma que o conteúdo é exibido, mesmo quando o objeto base NativeWindow for transparente. O arquivo SWF é carregado do diretório do aplicativo, mas você pode usar qualquer um dos esquemas de URL suportados pelo AIR. (O local do qual o arquivo SWF é carregado determina a caixa de proteção de segurança em que o AIR coloca o conteúdo.)
<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>
Você também pode usar um script para carregar conteúdo dinamicamente. O seguinte exemplo cria um nó
object
para exibir o arquivo SWF especificado no parâmetro
urlString
. O exemplo adiciona o nó como filho do elemento de página com a ID especificada pelo parâmetro
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>
O conteúdo SWF não é exibido se o objeto HTMLLoader for dimensionado ou girado, ou se a propriedade
alpha
estiver definida para um valor diferente de 1.0. Antes do AIR 1.5.2, o conteúdo SWF não era exibido em uma janela transparente, não importando como o valor
wmode
estava definido.
Nota:
Quando um objeto SWF incorporado tentar carregar um ativo externo como um arquivo de vídeo, o conteúdo do SWF poderá não ser renderizado adequadamente se não for fornecido um caminho absoluto para o vídeo no arquivo HTML. Contudo, um objeto SWF incorporado pode carregar um arquivo de imagem externo usando um caminho relativo.
O exemplo a seguir demonstra como os ativos externos podem ser carregados por meio de um objeto SWF incorporado num conteúdo 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");
}
No exemplo de ActionScript a seguir, o caminho da imagem passado pelo arquivo HTML é lido, e a imagem é carregada no palco:
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;
}
}
}
}