将数据从 Javascript 传递到 Flex 时出现问题

发布于 2024-10-20 05:42:19 字数 178 浏览 1 评论 0原文

我正在 Flex 中使用ExternalInterface 从 Javascript 检索 AMF 编码的字符串。问题是 AMF 编码字符串有时包含 \u0000,这会导致ExternalInterface 返回 null,而不是来自 Javascript 的编码字符串。

知道如何解决这个问题吗?

提前致谢。

I am using ExternalInterface in Flex to retrieve AMF encoded string from Javascript. The problem is the AMF encoded string sometimes contains \u0000 which causes the ExternalInterface to return null instead of the encoded string from Javascript.

Any idea how to solve this?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

素染倾城色 2024-10-27 05:42:20

读取外部数据时,\0000 被错误地解释为 EOF。当它出现在 XML 文件中时,也会发生同样的情况。

您应该能够在将字符串传递给 Flash 之前将其替换为明确的字符序列,并在 ActionScript 中接收时返回。在 JavaScript 函数中,使用类似这样的内容

return returnString.replace (/\0000/g, "{nil}");

应该会在将字符串返回到 Flash 之前从字符串中删除不需要的 \0000 字符。

Flash端,

receiveString = receiveString.replace (/\{nil\}/g, "\u0000"); 

接收到数据后直接使用。

The \0000 is falsely interpreted as EOF when reading external data. The same thing happens when it appears in XML files, as well.

You should be able to replace it with an unambiguous character sequence before passing the string to Flash, and back upon reception in ActionScript. In the JavaScript function, use something like

return returnString.replace (/\0000/g, "{nil}");

This should remove the unwanted \0000 characters from the string before returning it to Flash.

On the Flash side, use

receiveString = receiveString.replace (/\{nil\}/g, "\u0000"); 

directly after receiving the data.

缱倦旧时光 2024-10-27 05:42:20

将 pyamf AMF 输出编码为 base64 即可解决问题。

这是Python中的编码部分:

encoder = pyamf.get_encoder(pyamf.AMF3)
encoder.writeObject(myObject)
encoded = base64.b64encode(encoder.stream.getvalue())

这是AS3中的解码部分:

var myDecoder:Base64Decoder = new Base64Decoder();
myDecoder.decode(base64EncodedString);
var byteArr:ByteArray = myDecoder.toByteArray()
byteArr.position = 0;
var input:Amf3Input = new Amf3Input();
input.load(byteArr);                
var test:MyObject = input.readObject();

Encoding the pyamf AMF output to base64 will do the trick.

Here is the encoding part in python:

encoder = pyamf.get_encoder(pyamf.AMF3)
encoder.writeObject(myObject)
encoded = base64.b64encode(encoder.stream.getvalue())

Here is the decoding part in AS3:

var myDecoder:Base64Decoder = new Base64Decoder();
myDecoder.decode(base64EncodedString);
var byteArr:ByteArray = myDecoder.toByteArray()
byteArr.position = 0;
var input:Amf3Input = new Amf3Input();
input.load(byteArr);                
var test:MyObject = input.readObject();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文