RTCDataChannel:message 事件

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流浏览器均已支持。

当从远程对等方接收到消息时,WebRTC message 事件会发送到 RTCDataChannel 对象上的 onmessage 事件处理程序。

注意: message 事件使用 HTML 规范定义的 MessageEvent 接口作为其事件对象类型。

此事件不可取消,也不会冒泡。

语法

在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。

js
addEventListener("message", (event) => { })

onmessage = (event) => { }

事件类型

一个 MessageEvent。继承自 Event

Event MessageEvent

事件属性

还继承了其父接口 Event 的属性。

MessageEvent.data 只读

由消息发送者发送的数据。

MessageEvent.origin 只读

一个字符串,表示消息发送者的源。

MessageEvent.lastEventId 只读

一个字符串,表示事件的唯一 ID。

MessageEvent.source 只读

指向消息的发射器,它是 WindowProxyMessagePortServiceWorker 之一。

MessageEvent.ports 只读

一个 MessagePort 对象数组,表示消息发送通道(如果适用,例如在通道消息传递或向共享工作者发送消息时)关联的端口。

示例

对于使用其 createDataChannel() 方法创建的对等连接,给定的 RTCDataChannel dc,此代码设置了传入消息的处理程序,并通过将消息中包含的数据添加为新的 <p>(段落)元素来处理它们。

js
dc.addEventListener("message", (event) => {
  let newParagraph = document.createElement("p");
  let textNode = document.createTextNode(event.data);
  newParagraph.appendChild(textNode);

  document.body.appendChild(newParagraph);
});

我们首先创建新的段落元素,并将消息数据添加为新的文本节点。然后,我们将新的段落追加到文档正文的末尾。

您也可以使用 RTCDataChannel 对象的 onmessage 事件处理程序属性来设置事件处理程序。

js
dc.onmessage = (event) => {
  let newParagraph = document.createElement("p");
  let textNode = document.createTextNode(event.data);
  newParagraph.appendChild(textNode);

  document.body.appendChild(newParagraph);
};

规范

规范
WebRTC:浏览器中的实时通信
# event-datachannel-message
WebRTC:浏览器中的实时通信
# dom-rtcdatachannel-onmessage

浏览器兼容性

另见