在 AIR 应用程序中,可以像在浏览器中那样,在 HTML 中嵌入 SWF 内容。使用
object
标签、
embed
标签或同时二者可嵌入 SWF 内容。
注:
常见的 Web 开发做法是同时使用
object
标签和
embed
标签在 HTML 页中显示 SWF 内容。此做法在 AIR 中毫无益处。您可以只使用 W3C 标准的
object
标签在 AIR 中显示内容。同时,对于浏览器中显示的 HTML 内容,您可以继续同时使用
object
和
embed
标签(如果需要)。
如果在显示 HTML 和 SWF 内容的 NativeWindow 对象中启用了透明度,则用于嵌入内容的窗口模式 (
wmode
) 设置为
window
时,AIR 不会显示 SWF 内容。要在透明窗口的 HTML 页中显示 SWF 内容,请将
wmode
参数设置为
opaque
或
transparent
。
window
是
wmode
的默认值,因此如果不指定值,则可能不会显示所需内容。
以下示例说明如何使用 HTML
object
标签在 HTML 内容中显示 SWF 文件。应将
wmode
参数设置为
opaque
才可显示内容,即使基础 NativeWindow 对象是透明的。SWF 文件加载自应用程序目录,但您可以使用 AIR 支持的任何 URL 方案。(SWF 文件的加载位置决定了 AIR 放置内容的安全沙箱。)
<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>
还可以使用脚本动态地加载内容。以下示例创建了一个
object
节点,用于显示
urlString
参数中指定的 SWF 文件。该示例将此节点添加为页面元素的子元素,并使用
elementID
参数来指定 ID:
<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>
如果缩放或旋转 HTMLLoader 对象或者将
alpha
属性设置为 1.0 之外的任何值,则不会显示 SWF 内容。在早于 AIR 1.5.2 的版本中,无论将
wmode
值设置为何值,透明窗口中都不显示 SWF 内容。
注:
当嵌入式 SWF 对象尝试加载外部资源(如视频文件)时,如果 HTML 文件中未提供视频文件的绝对路径,可能无法正确呈现 SWF 内容。不过,嵌入式 SWF 对象可以使用相对路径加载外部图像文件。
下面的示例描述了如何通过嵌入到 HTML 内容中的 SWF 对象加载外部资源:
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");
}
在下面的 ActionScript 示例中,读取 HTML 文件传递的图像路径,并将该图像加载到舞台上:
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;
}
}
}
}