我想在包含使用Flex 3创建的Flash的HTML中指定一个字符串值。此值是Flex代码使用的URL,我希望其他开发人员能够更新它。我该怎么做呢?我正在使用Flex Builder 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由这个人维持正确:)。