如何在不编码或保存数据的情况下将二进制数据从javascript传递到actionscript(网页到flash)?

时间:2012-07-12 18:55:49

标签: javascript xml actionscript-3 sockets externalinterface

情况:我正在尝试用javascript替换Flash Socket通信(字节范围),以避免闪存套接字安全策略文件的限制。

详细信息:我有来自javascript的二进制数据,我可以通过base64编码/解码将其传递给flash,但这太慢了。保存到磁盘并传递本地URL不是一个选项(不仅仅是速度,而且客户端更喜欢内存中的所有内容,并且可能限制swf文件加载本地文件)。此外,不使用base64不起作用,因为flash的ExternalInterface使用XML(不是为了携带二进制数据)将数据传递给AS3。

问题:有没有办法在不写入磁盘而不是bae64编码的情况下从JS到AS3获取二进制数据?

我知道动作消息格式(AMF),但它似乎增加了许多外部依赖的方式,可能仍然很慢?

注意:我的程序需要尽可能与浏览器兼容,并且由客户端下载(因此需要很小)并且还需要尽可能快地运行...

谢谢!

1 个答案:

答案 0 :(得分:1)

我已经略微改变了我对这个问题的看法:

没有直接方式在Flash和Javascript之间发送二进制数据,而不首先将其编组为基于文本的格式(即:base64编码)。

正如OP所指出的,为了促进Actionscript和Javascript之间的通信ExternalInterface class actually marshals objects/data into an XML format。因此,二进制数据需要通过这种转换为XML。

新想法:当您使用ExternalInterface时,Flash应用程序实际修改了DOM,添加了将数据序列化/反序列化为XML的方法(需要参考,我已阅读过这个,但现在找不到)。从技术上讲,可以在Javascript中重新定义这些方法,并修复在尝试传递二进制数据时看到的XML解析错误。你必须确定这些方法名称的名称(我记得它们以__Flash__或类似的方式开头。)