DOMException#

Wstęp#

Wyjątek DOMException stanowi definicję Web IDL dla obiektów reprezentujących błędy, które powstały w wyniku niewłaściwego zastosowania poleceń DOM w programie. Są one potocznie nazywane wyjątkami DOM # i wykorzystywane w ogólnym mechanizmie obsługi wyjątków JavaScriptu.

Z teoretycznego punktu widzenia wyjątki Web IDL różnią się od interfejsów Web IDL tym, że wyjątki mogą posiadać jedynie stałe oraz pola wyjątków (łącznie zwanych członkami wyjątku), w przeciwieństwie do trzech typów członków interfejsu (stałe, atrybuty i operacje).

Wyjątki DOM są ściśle określone przez specyfikację DOM. Mają konkretne nazwy oraz odpowiadające im stałe i wartości. Każda implementacja DOM powinna wspierać ten rodzaj błędów w taki sposób, jaki opisuje to specyfikacja.

Algorytm zrzucania # (throw) wyjątku o nazwie name jest następujący:

  1. Niech code ma wartość zero.
  2. Jeśli name znajduje się w pierwszej kolumnie tabeli nazwanych błędów oraz ma odpowiadającą wartość pola code wyjątku w czwartej kolumnie, to ustaw code na tę wartość.
  3. Zrzuć nowy wyjątek typu DOMException, którego wiadomością jest wartość zdefiniowana przez aplikację kliencką, nazwą jest name, i którego pole code wyjątku to code.

Aby zrzucić wyjątek "TimeoutError" aplikacja kliencka powinna utworzyć wyjątek typu DOMException, którego nazwą jest "TimeoutError", wartością pola code wyjątku jest 23, i rzeczywiście zrzucić ten objekt jako wyjątek. W JavaScripcie wyjątek ten będzie miał właściwość name, której wartością będzie "TimeoutError".

Wyjątek DOMException nie dziedziczy z żadnego innego wyjątku w ogólnym ujęciu DOM, chociaż w środowisku JS obiekty implementujące ten wyjątek będą dziedziczyły z podstawowego błędu typu Error, dlatego mają dostęp do wszystkich poleceń z jego prototypu (oraz z kolejnych prototypów w łańcuchu dziedziczenia).

W poniższej tabeli zamieszczam wykaz nazwanych błędów # oraz ich specyficzne cechy.

NazwaOpis (EN)Odpowiadająca stałaWartość stałej
(pola code)
"IndexSizeError" #The index is not in the allowed range.INDEX_SIZE_ERR1
"HierarchyRequestError" #The operation would yield an incorrect node tree.HIERARCHY_REQUEST_ERR3
"WrongDocumentError" #The object is in the wrong document.WRONG_DOCUMENT_ERR4
"InvalidCharacterError" #The string contains invalid characters.INVALID_CHARACTER_ERR5
"NoModificationAllowedError" #The object can not be modified.NO_MODIFICATION_ALLOWED_ERR7
"NotFoundError" #The object can not be found here.NOT_FOUND_ERR8
"NotSupportedError" #The operation is not supported.NOT_SUPPORTED_ERR9
"InUseAttributeError" #The attribute is in use.INUSE_ATTRIBUTE_ER10
"InvalidStateError" #The object is in an invalid state.INVALID_STATE_ERR11
"SyntaxError" #The string did not match the expected pattern.SYNTAX_ERR12
"InvalidModificationError" #The object can not be modified in this way.INVALID_MODIFICATION_ERR13
"NamespaceError" #The operation is not allowed by Namespaces in XML.NAMESPACE_ERR14
"InvalidAccessError" #The object does not support the operation or argument.INVALID_ACCESS_ERR15
"SecurityError" #The operation is insecure.SECURITY_ERR18
"NetworkError" #A network error occurred.NETWORK_ERR19
"AbortError" #The operation was aborted.ABORT_ERR20
"URLMismatchError" #The given URL does not match another URL.URL_MISMATCH_ERR21
"QuotaExceededError" #The quota has been exceeded.QUOTA_EXCEEDED_ERR22
"TimeoutError" #The operation timed out.TIMEOUT_ERR23
"InvalidNodeTypeError" #The supplied node is incorrect or has an incorrect ancestor for this operation.INVALID_NODE_TYPE_ERR24
"DataCloneError" #The object can not be cloned.DATA_CLONE_ERR25
"EncodingError" #The encoding operation (either encoded or decoding) failed.--
"NotReadableError" #The I/O read operation failed.--
"UnknownError" #The operation failed for an unknown transient reason (e.g. out of memory).--
"ConstraintError" #A mutation operation in a transaction failed because a constraint was not satisfied.--
"DataError" #Provided data is inadequate.--
"TransactionInactiveError" #A request was placed against a transaction which is currently not active, or which is finished.--
"ReadOnlyError" #The mutating operation was attempted in a "readonly" transaction.--
"VersionError" #An attempt was made to open a database using a lower version than the existing version.--
"OperationError" #The operation failed for an operation-specific reason.--

Część nazwanych błędów z poprzednich specyfikacji DOM uznana została za przestarzałe i w nowym DOM4 nie jest już opisywana. Takie błędy celowo pominąłem w powyższej tabeli.

Przy opisach poszczególnych algorytmów w DOM4 jasno zdefiniowano, które wyjątki powinny zostać zrzucone w przypadku niewłaściwego działania poleceń DOM. Nowoczesne przeglądarki zachowują się w tym obszarze dosyć spójnie, ale udostępniają różne właściwości dla błędów. Największa różnica występuje w przypadku odczytywania właściwości name:

Opieranie obsługi błędów na podstawie domyślnych komunikatów zwracanych przez programy nie jest dobrym pomysłem, nigdy nie ma gwarancji zwrócenia tego samego wyjątku w każdej aplikacji.

Właściwości DOMException#

NazwaOpis
DOMException.codeZwraca kod danego wyjątku reprezentowany przez stałą wartość liczbową.

Stałe DOMException#

NazwaWartość
INDEX_SIZE_ERR1
DOMSTRING_SIZE_ERR2
HIERARCHY_REQUEST_ERR3
WRONG_DOCUMENT_ERR4
INVALID_CHARACTER_ERR5
NO_DATA_ALLOWED_ERR6
NO_MODIFICATION_ALLOWED_ERR7
NOT_FOUND_ERR8
NOT_SUPPORTED_ERR9
INUSE_ATTRIBUTE_ERR10
INVALID_STATE_ERR11
SYNTAX_ERR12
INVALID_MODIFICATION_ERR13
NAMESPACE_ERR14
INVALID_ACCESS_ERR15
VALIDATION_ERR16
TYPE_MISMATCH_ERR17
SECURITY_ERR18
NETWORK_ERR19
ABORT_ERR20
URL_MISMATCH_ERR21
QUOTA_EXCEEDED_ERR22
TIMEOUT_ERR23
INVALID_NODE_TYPE_ERR24
DATA_CLONE_ERR25

Wyjątek Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
exception DOMException {
	const unsigned short INDEX_SIZE_ERR = 1;
	const unsigned short DOMSTRING_SIZE_ERR = 2; // historical
	const unsigned short HIERARCHY_REQUEST_ERR = 3;
	const unsigned short WRONG_DOCUMENT_ERR = 4;
	const unsigned short INVALID_CHARACTER_ERR = 5;
	const unsigned short NO_DATA_ALLOWED_ERR = 6; // historical
	const unsigned short NO_MODIFICATION_ALLOWED_ERR = 7;
	const unsigned short NOT_FOUND_ERR = 8;
	const unsigned short NOT_SUPPORTED_ERR = 9;
	const unsigned short INUSE_ATTRIBUTE_ERR = 10;
	const unsigned short INVALID_STATE_ERR = 11;
	const unsigned short SYNTAX_ERR = 12;
	const unsigned short INVALID_MODIFICATION_ERR = 13;
	const unsigned short NAMESPACE_ERR = 14;
	const unsigned short INVALID_ACCESS_ERR = 15;
	const unsigned short VALIDATION_ERR = 16; // historical
	const unsigned short TYPE_MISMATCH_ERR = 17; // historical; use JavaScript's TypeError instead
	const unsigned short SECURITY_ERR = 18;
	const unsigned short NETWORK_ERR = 19;
	const unsigned short ABORT_ERR = 20;
	const unsigned short URL_MISMATCH_ERR = 21;
	const unsigned short QUOTA_EXCEEDED_ERR = 22;
	const unsigned short TIMEOUT_ERR = 23;
	const unsigned short INVALID_NODE_TYPE_ERR = 24;
	const unsigned short DATA_CLONE_ERR = 25;
	unsigned short code;
};

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

DOMException (H1) Wstęp (H2) Właściwości DOMException (H3) Stałe DOMException (H3) Wyjątek Web IDL (H3) Specyfikacje i inne materiały (H3)