RTCDataChannel:错误事件

当数据通道上发生错误时,WebRTC error 事件将发送到 RTCDataChannel 对象的 onerror 事件处理程序。

RTCErrorEvent 对象提供有关发生的错误的详细信息;有关详细信息,请参阅该文章。

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

语法

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

js
addEventListener("error", (event) => {});

onerror = (event) => {};

事件类型

事件属性

除了下面列出的属性外,父接口 Event 的属性也可用。

error 只读

一个 RTCError 对象,指定发生的错误;此对象包含发生的错误类型,以及有关错误发生位置的信息(例如,SDP 中的哪一行或哪个 SCTP 原因代码有问题)。

示例

js
// Strings for each of the SCTP cause codes found in RFC
// 4960, section 3.3.10:
// https://datatracker.ietf.org/doc/html/rfc4960#section-3.3.10

const sctpCauseCodes = [
  "No SCTP error",
  "Invalid stream identifier",
  "Missing mandatory parameter",
  "Stale cookie error",
  "Sender is out of resource (i.e., memory)",
  "Unable to resolve address",
  "Unrecognized SCTP chunk type received",
  "Invalid mandatory parameter",
  "Unrecognized parameters",
  "No user data (SCTP DATA chunk has no data)",
  "Cookie received while shutting down",
  "Restart of an association with new addresses",
  "User-initiated abort",
  "Protocol violation",
];

dc.addEventListener(
  "error",
  (ev) => {
    const err = ev.error;

    console.error("WebRTC error: ", err.message);

    // Handle specific error detail types

    switch (err.errorDetail) {
      case "sdp-syntax-error":
        console.error("    SDP syntax error in line ", err.sdpLineNumber);
        break;
      case "idp-load-failure":
        console.error(
          "    Identity provider load failure: HTTP error ",
          err.httpRequestStatusCode,
        );
        break;
      case "sctp-failure":
        if (err.sctpCauseCode < sctpCauseCodes.length) {
          console.error("    SCTP failure: ", err.sctpCauseCode);
        } else {
          console.error("    Unknown SCTP error");
        }
        break;
      case "dtls-failure":
        if (err.receivedAlert) {
          console.error("    Received DLTS failure alert: ", err.receivedAlert);
        }
        if (err.sentAlert) {
          console.error("    Sent DLTS failure alert: ", err.receivedAlert);
        }
        break;
    }

    // Add source file name and line information

    console.error(
      "    Error in file ",
      err.filename,
      " at line ",
      err.lineNumber,
      ", column ",
      err.columnNumber,
    );
  },
  false,
);

接收到的事件在名为 errorRTCError 对象中提供详细信息;RTCErrorDOMException 接口的扩展。错误的 nameRTCError,而 message 是 WebRTC 层指定的错误字符串。

错误信息使用 console.error() 输出到控制台。始终输出 message 字符串,以及发生错误时源文件的名称、行号和列号信息。

但是,此外,根据 errorDetail 的值,可能会输出其他信息。每种错误类型都有不同的信息集输出。例如,SDP 语法错误显示 SDP 中错误的行号,而 SCTP 错误显示与 SCTP 原因代码相对应的消息。其他错误类型也以类似的方式输出适当的信息。

您还可以使用 RTCDataChannel 接口的 onerror 事件处理程序属性为 error 事件设置事件处理程序

js
dc.onerror = (ev) => {
  const err = ev.error;

  // …
};

注意:由于 RTCError 不是旧版错误之一,因此 RTCError.code 的值始终为 0。

规范

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

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅