加载外部 SWF 文件

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

在 ActionScript 3.0 中,SWF 文件是使用 Loader 类来加载的。若要加载外部 SWF 文件,ActionScript 需要执行以下 4 个操作:

  1. 用文件的 URL 创建一个新的 URLRequest 对象。

  2. 创建一个新的 Loader 对象。

  3. 调用 Loader 对象的 load() 方法,并以参数形式传递 URLRequest 实例。

  4. 对显示对象容器(如 Flash 文档的主时间轴)调用 addChild() 方法,将 Loader 实例添加到显示列表中。

最后,代码如下所示:

var request:URLRequest = new URLRequest("http://www.[yourdomain].com/externalSwf.swf"); 
var loader:Loader = new Loader() 
loader.load(request); 
addChild(loader);

通过指定图像文件的 URL 而不是 SWF 文件的 URL,可以使用上述同样的代码加载外部图像文件,如 JPEG、GIF 或 PNG 图像。SWF 文件不同于图像文件,可能包含 ActionScript。因此,虽然加载 SWF 文件的过程可能与加载图像的过程完全相同,但如果 Flash Player 或 AIR 在播放 SWF,并且您计划使用 ActionScript 以某种方式与外部 SWF 文件通信,则在加载该外部 SWF 文件时,执行加载的 SWF 文件和要加载的 SWF 文件必须位于同一个安全沙箱中。另外,如果外部 SWF 文件包含了与执行加载的 SWF 文件中的类共享同一命名空间的类,可能需要为被加载的 SWF 文件创建新的应用程序域才能避免命名空间冲突。有关安全性和应用程序域注意事项的详细信息,请参阅使用应用程序域加载内容

当成功加载外部 SWF 文件后,可通过 Loader.content 属性访问该文件。如果该外部 SWF 文件是针对 ActionScript 3.0 发布的,则加载的文件将为影片剪辑或 sprite,具体取决于所扩展的类。

与其他平台相比,在 Adobe AIR for iOS 中加载 SWF 文件存在一些不同之处。有关详细信息,请参阅在 AIR for iOS 中加载 SWF 文件

加载早期 SWF 文件的注意事项

如果已使用早期版本的 ActionScript 发布了外部 SWF 文件,则需要考虑一些重要的限制条件。与在 AVM2 (ActionScript Virtual Machine 2) 中运行的 ActionScript 3.0 SWF 文件不同,针对 ActionScript 1.0 或 2.0 发布的 SWF 文件在 AVM1 (ActionScript Virtual Machine 1) 中运行。

将 ActionScript 1.0 或 2.0 SWF 文件加载到 ActionScript 3.0 SWF 文件时,(与加载 ActionScript 3.0 SWF 文件相比)有重要区别。Flash Player 提供与以前发布的内容的完全后向兼容性。在以前版本的 Flash Player 中运行的任何内容可在支持 ActionScript 3.0 的 Flash Player 版本中运行。但是,存在以下限制:

  • ActionScript 3.0 代码可以加载使用 ActionScript 1.0 或 2.0 编写的 SWF 文件。如果 ActionScript 1.0 或 2.0 SWF 文件成功加载,加载的对象(Loader.content 属性)是 AVM1Movie 对象。AVM1Movie 实例不同于 MovieClip 实例。而是显示对象,但不同于影片剪辑,它不包括与时间轴相关的方法或属性。父 AVM2 SWF 文件无法访问加载的 AVM1Movie 对象的属性、方法或对象。

  • 以 ActionScript 1.0 或 2.0 编写的 SWF 文件无法加载以 ActionScript 3.0 编写的 SWF 文件。这意味着,在 Flash 8 或 Flex Builder 1.5 或更早版本中创作的 SWF 文件无法加载 ActionScript 3.0 SWF 文件。

    此规则的唯一例外情况是,只要 ActionScript 2.0 SWF 文件以前没有向它的任何级别加载任何内容,ActionScript 2.0 SWF 文件就可以用 ActionScript 3.0 SWF 文件来替换它自身。ActionScript 2.0 SWF 文件可通过调用 loadMovieNum() 并将值 0 传递给 level 参数来实现此目的。

  • 通常,如果使用 ActionScript 1.0 或 2.0 编写的 SWF 文件要与使用 ActionScript 3.0 编写的 SWF 文件一起使用,则必须迁移前者。例如,假设您使用 ActionScript 2.0 创建了一个媒体播放器。此媒体播放器加载的也是使用 ActionScript 2.0 创建的多种内容。您无法使用 ActionScript 3.0 创建新内容并在此媒体播放器中加载新内容。您必须将视频播放器迁移到 ActionScript 3.0。

    但是,如果您在 ActionScript 3.0 中创建一个媒体播放器,则该媒体播放器可以执行 ActionScript 2.0 内容的简单加载。

下面的表总结了以前版本的 Flash Player 在加载较新内容和执行代码方面的限制,以及在使用不同版本的 ActionScript 编写的 SWF 文件之间进行跨脚本访问的限制。

支持的功能

Flash Player 7

Flash Player 8

Flash Player 9 和 10

可以加载针对以下版本发布的 SWF

7 和更早版本

8 和更早版本

9(或 10)及更低版本

包含此 AVM

AVM1

AVM1

AVM1 和 AVM2

运行在以下 ActionScript 版本中编写的 SWF

1.0 和 2.0

1.0 和 2.0

1.0、2.0 和 3.0

在下表中,“支持的功能”指在 Flash Player 9 或更高版本中运行的内容。运行在 Flash Player 8 或更早版本中的内容只能在 ActionScript 1.0 和 2.0 中加载、显示、执行以及跨脚本编写。

支持的功能

以 ActionScript 1.0 和 2.0 创建的内容

以 ActionScript 3.0 创建的内容

可以加载在以下版本中创建的内容并在其中执行代码

仅 ActionScript 1.0 和 2.0

ActionScript 1.0、2.0 和 ActionScript 3.0

可以对在以下版本中创建的内容进行跨脚本编写

仅 ActionScript 1.0 和 2.0(通过本地连接的 ActionScript 3.0)

ActionScript 1.0 和 2.0(通过本地连接)。

ActionScript 3.0