有没有办法将属性从HTML页面传递到使用Flex创建的Flash应用程序?

时间:2011-05-11 20:14:07

标签: flash flex actionscript-3 actionscript

我想在包含使用Flex 3创建的Flash的HTML中指定一个字符串值。此值是Flex代码使用的URL,我希望其他开发人员能够更新它。我该怎么做呢?我正在使用Flex Builder 3。

3 个答案:

答案 0 :(得分:7)

您可以尝试使用javascript和ExternalInterface,或只使用flashVars

如果您只想传递一个参数,那么使用flashVars可能会更容易。

答案 1 :(得分:0)

FlashVars 将是最简单的解决方案。

为SWF嵌入代码:

<object width="300" height="250">
    <param name="flashvars" value="var1=hello&var2=world" />
    <embed src="file.swf?var1=hello&var2=world" width="300" height="250" />
</object>

从AS3访问vars:

var ext:Object = root.loaderInfo.parameters;

// ext.var1 -> hello
// ext.var2 -> world

答案 2 :(得分:0)

正如Alex Jillard和Marty指出的那样,您可以使用flashvars将数据传递给Flash应用程序。但是,只有当您希望传递的数据在应用程序加载时存在时,此方法才可行。

如果您希望在应用程序生命周期内的任何时候将数据传递给Flash应用程序,可以通过在应用程序中为此目的创建方法,将该方法添加到应用程序的ExternalInterface( Alex提到),然后使用Javascript调用该方法。

假设Flash应用程序在您的HTML中表示为名为flashDOMElement的DOMElement,并且上述方法名为acceptData,您可以将该方法添加到应用程序的外部接口,如下所示:

//ActionScript
ExternalInterface.addCallback("acceptData");

然后使用DOMElement调用方法:

//Javascript
flashDOMElement.acceptData(/*arg1, arg2, ... */);

你想要这样做的原因(让数据可供另一个开发人员修改)让我相信你可能想要在Flash应用程序收到后保留这些数据。您可以使用本地共享对象执行此操作。

如果我的假设是正确的,BakedGoods是您可能想要查看的解决方案。它是一个Javascript库,它建立了一个统一的接口,可用于在所有本机和一些非本机存储设施中执行常见的存储操作,包括Flash本地共享对象。

有了它,可以使用以下代码完成创建LSO:

bakedGoods.set({
    data: [{key: "key", value: "value"}],
    storageTypes: ["flash"],
    complete: function(byStorageTypeRemovedItemKeysObj, byStorageTypeErrorObj){/*code*/}
});

为了完全透明,BakedGoods由这个人维持正确:)。