RTCDataChannel:错误事件
当数据通道上发生错误时,WebRTC error
事件将发送到 RTCDataChannel
对象的 onerror
事件处理程序。
RTCErrorEvent
对象提供有关发生的错误的详细信息;有关详细信息,请参阅该文章。
此事件不可取消,也不会冒泡。
语法
在诸如 addEventListener()
的方法中使用事件名称,或设置事件处理程序属性。
js
addEventListener("error", (event) => {});
onerror = (event) => {};
事件类型
一个 RTCErrorEvent
。继承自 Event
。
事件属性
示例
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,
);
接收到的事件在名为 error
的 RTCError
对象中提供详细信息;RTCError
是 DOMException
接口的扩展。错误的 name
是 RTCError
,而 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 的浏览器中加载。