1

假设我有两个 swf A 和 B,在运行时,swf A 加载 swf B,我希望在它们之间共享代码,以最小化文件大小和下载时间。

如果 swf B 有一些代码(比如 com.blah.HelloWorld),我告诉编译器在 swf A 的类路径中有 swf B 的源代码,但只做一个编译时链接,而不是实际将 com.blah.HelloWorld 编译成 swf A .

这行得通,我已经尝试过了,使用 -includes 和 -externs 编译器选项。

但是,我的问题是我希望以另一种方式做到这一点。即 swf A 和 B(可能还有 swf C)都需要 com.blah.HelloWorld,但我希望将 com.blah.HelloWorld 编译成 swf A,将它作为 swf B 中的外部引用(也可能是 C .)

我尝试使用外部和包含来执行此操作,但执行此操作时会出现 ReferenceErrors。

我想在没有单独的 rsl 的情况下执行此操作,因此可以减少 http 请求的数量。这可能吗?

4

3 回答 3

1

您可以将您的 flex 应用程序拆分为模块

getDefinition或者,您可以使用类的方法从运行时加载的 SWF 访问各个ApplicationDomain类:

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad);
loader.load(new URLRequest("c.swf"));
//..
private function onLoad(e:Event):void
{
  var domain:ApplicationDomain = LoaderInfo(e.target).applicationDomain;
  var Type:Class = domain.getDefinition("pack.MyComponent") as Class;
  var myBox:Sprite = new Type();
  addChild(myBox);
}
于 2009-09-25T04:51:23.010 回答
0

我不确定我是否完全理解你的问题,但我认为你可以使用 AS3 Loader 类来做你想做的事。格式是这样的 - 假设我们正在创建您的主应用程序(将被称为“a.swf”)并且您想要访问已编译到另一个应用程序(称为“b.swf”)中的方法和属性),你会这样做:

var SWFB:Object; // empty at first as a placeholder.

var url:URLRequest  = new URLRequest("b.swf");
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
l.load(url);

function loaded(e:Event):void {
 SWFB = e.currentTarget.content as Object;
 initApp();
}

function initApp():void {
 SWFB.someMethodCall();
}

...我认为这会奏效。我现在无法测试它,但请尝试并让我知道。基本上,您将加载 b.swf 作为基本对象,然后您可以针对该对象调用方法。

请让我知道这是否有效,如果没有,我明天可以为您完善它。

于 2009-09-25T00:34:30.017 回答
0

我不确定这是否正是您想要的,但您可以使用一些 javascript 来让两个 swf 一起工作。

这是一个教程:

http://greeneggsandcam.com/tutorials/connect-2-swfs

于 2011-08-26T15:06:27.490 回答