将文件从AS3传递到嵌入式AS2包装器进行加载

时间:2012-03-07 16:02:23

标签: actionscript-3 flash actionscript-2

我有一个Flash AS3应用程序,它使用FileReference.browse()从用户请求SWF。如果选择的SWF是AS3,我很高兴。但是,如果它是AS2,我需要先将它加载到AS2包装器中(所以我的应用程序可以改变它)。所有这些文件(包括我的应用程序和包装器)都旨在本地存在于用户的计算机上,但它们选择的文件可以存在于任何目录中。所以要明确:主要应用(AS3) - >包装(AS2) - >用户的文件(AS2)

我知道如何从Loader的loaderInfo.actionScriptVersion变量获取上传文件的ActionScript版本,并且这是正常的。我的问题是如何将文件从AS3应用程序传递给AS2包装器,以便加载它。

我的第一个想法是将ByteArray从FileReference的load()函数转储到SharedObject“cookie”中。从用户体验的角度来看,这种方法看起来非常糟糕,但似乎最有可能奏效。但是,我一直无法在AS2中找到任何方法来将ByteArray加载为电影(事实上,AS2似乎甚至没有ByteArray类)。所以我的问题的第一个可能的解决方案是,如果有人知道从AS2中的ByteArray加载电影的方法。

我的第二个想法是通过已经设置的LocalConnection网桥将上传文件的路径传递给我的包装器,然后让它从中加载文件。但是,我找不到任何方法来获取文件的路径,而我的谷歌搜索表明安全模型故意阻止它。更不用说了,我不确定我是否可以从用户的机器上加载任意文件。

我的“举手播放;我放弃了”解决方案就是创建单独的按钮来加载AS3和AS2文件(让用户猜测它是什么!)并让AS2按钮实际上在AS2包装。但是,看起来AS2没有文件浏览上传API,我发现的PHP混合解决方案不是一个选项(因为这意味着要在本地运行)。 / p>

所以,如果有人能指出我正确的方向来解决这三个障碍中的任何障碍,我将永远感激不尽。其他解决方案当然是受欢迎的。


(编辑) 好的,我找到了AS2版FileReference类的文档。它支持相同的文件浏览功能,但不支持直接将所选文件加载到SWF中。

但是,安全沙箱对于本地文件似乎并不像我预期的那样严格,看起来我可以在用户的​​机器上加载任何SWF。 所以我应该能够使用带有文件输入的JavaScript和HTML表单来获取并将文件路径传递给我的应用程序。从Web浏览器中完成所有这些操作并不理想,但它应该可行。如果结果令人满意,我会将其作为答案提交。


(编辑2) 抓住HTML形式的想法。看起来这条路径是隐藏在JavaScript中的,因为Flash隐藏了它。我现在能想到的唯一选择是让用户将路径复制并粘贴到文件中......

2 个答案:

答案 0 :(得分:0)

阅读完帖子后,您可以使用一些新信息重试之前的尝试。 Actionscript 2 DOES有一种从浏览器查找文件的方法,与AS3相同。 AS2还有一个FileReference类。查看文档:

http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00001040.html

另外,这是一个教程:

http://markshu.ca/imm/flash/tutorial/fileReference.html

答案 1 :(得分:0)

好吧,我的所有其他线索已经干涸,所以我提交的两个答案实际上都会有效,尽管两者都不理想:

A)使用Adobe AIR,它将提供对文件系统的更多访问权限(例如获取路径信息),但代价是需要安装单独的AIR运行时。

B)让用户自己输入文件的路径(对用户来说很麻烦)