如何在safari5中通过websocket发送二进制数据

如何在safari5中通过websocket发送二进制数据,safari,binary,websocket,Safari,Binary,Websocket,我发现Safari5.1使用的是websocket的草稿版本,我认为它是hybi-00 我正在尝试使用以下代码发送二进制数据: var ab = new ArrayBuffer(64); var dv = new DataView(ab); dv.setUint32(0, 1); websock.send(ab); 但是服务器接收到一条包含“[object ArrayBuffer]”的文本消息,而不是二进制消息。服务器接收的数据的十六进制转储为: 00

我发现Safari5.1使用的是websocket的草稿版本,我认为它是hybi-00

我正在尝试使用以下代码发送二进制数据:

    var ab = new ArrayBuffer(64);
    var dv = new DataView(ab);
    dv.setUint32(0, 1);
    websock.send(ab);
但是服务器接收到一条包含“[object ArrayBuffer]”的文本消息,而不是二进制消息。服务器接收的数据的十六进制转储为:

    00 5b 6f 62 6a 65 63 74 20 41 72 72 61 79 42 75     .[object.ArrayBu
    66 66 65 72 5d ff -- -- -- -- -- -- -- -- -- --     ffer].
显然,javascript将ArrayBuffer对象转换为字符串,并将字符串发送到服务器


那么,如何在ArrayBuffer中发送二进制数据呢?

hybi 00/hixie 76 WebSocket规范草案没有包括最终版本中的许多功能,包括二进制消息。不幸的是,在hybi00浏览器中无法支持本机二进制websocket消息。

我不确定,但您可以尝试:


websock.send(ab.buffer)

代码看起来不错。可能Safari5根本不支持二进制消息?您可以测试发送ArrayBufferView(如Uint8Array)而不是ArrayBuffer。然而,标准webkit甚至比send(ArrayBuffer)晚了很多时间才为send实现这个重载,因此我认为它也不会工作。我不得不放弃,我在safari5上花了太多时间。我的web应用程序将不支持safari5。。。