【问题标题】:How do I tell the type of websocket onmessage's parameter?如何判断 websocket onmessage 的参数类型?
【发布时间】:2025-12-08 15:50:01
【问题描述】:

这里https://developer.mozilla.org/en/WebSockets/WebSockets_reference/MessageEvent 声明属性数据是DOMString 类型|斑点 |数组缓冲区。我如何告诉它我想要哪种类型?或者我怎么知道我得到的是哪种类型?

【问题讨论】:

    标签: javascript websocket blob arraybuffer


    【解决方案1】:

    服务器可以发送的适当的两种类型的帧是文本帧和二进制帧 (5.2)。 ws.binaryType 允许您定义要以哪种格式获取二进制数据。

    • 二进制数据:取决于binaryType 设置为arraybufferblob
    • 文本数据:字符串

    要确定类型,可以使用:

    • e.data instanceof ArrayBuffer
    • e.data instanceof Blob
    • typeof e.data === "string"

    Reference:

    4。如果type表示数据为Text,则将eventdata属性初始化为data

    如果type表示数据是Binary,并且binaryType设置为“blob”,那么将eventdata属性初始化为将 data 表示为其原始数据的新 Blob 对象。

    如果type表示数据是Binary,并且binaryType设置为“arraybuffer”,那么将eventdata属性初始化为一个新的只读ArrayBuffer内容为data的对象。

    【讨论】:

      【解决方案2】:

      “我如何告诉它我想要哪种类型?”

      websocket 帧中的数据类型由发送方确定(参见1.2),因此无法由接收方设置。如果发送文本数据,则e.data 的类型为string。如果发送二进制数据,则e.data 将是ArrayBufferBlob 的实例,具体取决于接收方设置的ws.binaryType 属性的值。

      “或者我怎么知道我得到的是哪种类型?”

      pimvdb 已经回答了这个问题。

      【讨论】:

        最近更新 更多