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 |
瀏覽器相容性
載入中…