RTCDataChannel:error 事件
当数据通道发生错误时,会向 RTCDataChannel 对象的 onerror 事件处理程序发送一个 WebRTC error 事件。
RTCErrorEvent 对象提供了有关发生的错误的详细信息;有关详细信息,请参阅该文章。
此事件不可取消,也不会冒泡。
语法
在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。
js
addEventListener("error", (event) => { })
onerror = (event) => { }
事件类型
一个 RTCErrorEvent。继承自 Event。
事件属性
除了下面列出的属性之外,父接口 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 DTLS failure alert: ", err.receivedAlert);
}
if (err.sentAlert) {
console.error(" Sent DTLS 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,
);
});
收到的事件通过一个名为 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 |
浏览器兼容性
加载中…