[1] [[DOM]] では、処理を行えない時に[DFN[[RUBYB[例外] [exception]]]]が発生します。 特に DOM 全般で発生し得る例外や DOM Core Module・XML Module で使われる例外が [DFN[[CODE(DOM)[DOMException]]]] です。 ちなみに、処理が行えない時というのは (1) 論理的理由から行えない時、 (2) データが失われた時 (3) 実装が不安定な時などです。 通常索引に範囲外の値が指定された場合などは例外ではなく [CODE(DOM)[[[null]]]] 値が返される程度で済まされます。 また、束縛によっては例外という概念がないので、返し値などで伝達されることになります。 [4] [CODE(DOM)[DOMException]] は DOM Core Module の一部です。 すべての DOM 実装が完全に実装しなければなりません。 [5] 仕様書: - [DOM 1] Core Exception [CODE(DOM)[DOMException]] - [DOM 2] Core Exception [CODE(DOM)[DOMException]] - [DOM 3] Core Exception [CODE(DOM)[DOMException]] [6] [CODE(DOM)[DOMException]] の例外の種類は定義群 [CODE(DOM)[[[ExceptionCode]]]] の定数で識別されます。 [7] ,名前 ,型 ,出典 ,[CODE(DOM)[[[code]]]] ,[CODE(DOM)[[[unsigned]] [[short]]]] ,"[DOM 1,2,3]" [8] [CODE(DOM)[DOMSTRING_SIZE_ERR]] はほとんどすべての [CODE(DOM)[DOMString]] 型メソッド・属性で発生し得ると思うのですが、 仕様書には一部のメソッド・属性にしか書いてありません。 例えば [CODE(DOM)[[CODE(DOMi)[[[Node]]]].[CODE(DOMa)[[[localName]]]]]] 取得時に起こっても不思議はないのですが、 実際にはそんな猛烈な長さの名前など到底使われそうにも無いからなのか、例外が発生し得るとは書いてありません。 ([[名無しさん]]) [9] [CITE[IRC logs: freenode / #whatwg / 20080811]] ([CODE[2008-08-14 19:22:43 +09:00]] 版) * 例外符号 [10] [CITE@en[Exception Codes - WHATWG Wiki]] ([TIME[2008-08-11 07:36:37 +09:00]] 版) [11] ,[CODE(DOMc)@en[[[INVALID_EXPRESSION_ERR]]]],[CODE(DOM)[[[51]]]],[[DOM XPath]] ([CODE(DOMi)@en[[[XPathException]]]]) ,[CODE(DOMc)@en[[[TYPE_ERR]]]],[CODE(DOM)[[[52]]]],[[DOM XPath]] ([CODE(DOMi)@en[[[XPathException]]]]) ,[CODE(DOMc)@en[[[NO_SCHEMA_AVAILABLE_ERR]]]],[CODE(DOM)[[[71]]]],[[DOM妥当性検証]] ([CODE(DOMi)@en[[[ExceptionVal]]]]) ,[CODE(DOMi)@en[[[PARSE_ERR]]]],[CODE(DOM)[[[81]]]],[[DOM LS]] ([CODE(DOMi)@en[[[LSException]]]]) ,[CODE(DOMi)@en[[[SERIALIZE_ERR]]]],[CODE(DOM)[[[82]]]],[[DOM LS]] ([CODE(DOMi)@en[[[LSException]]]]) [53] [[DOM3]] で導入された[[例外]]の[[符号]]は [CODE(DOMi)@en[[[DOMException]]]] とかぶらないようになっていますが、 [[DOM2]] で導入されたもの ([CODE(DOMi)@en[[[EventException]]]], [CODE(DOMi)@en[[[RangeException]]]]) はかぶっています。 [83] 完成しなかった [[DOM AS]] も古い時期で放棄されたためか [CODE(DOMi)@en[[[DOMException]]]] とかぶっています。 [84] なんで60番台は使われていないのでしょう。 [94] 定義群 [DFN[[CODE(DOM)[ExceptionCode]]]] は、 [CODE(DOM)[[[DOMException]]]] の[[例外]]の種類を表す定数群です。 仕様書: - [DOM 1] Core Definition group [CODE(DOM)[ExceptionCode]] - [DOM 2] Core Definition group [CODE(DOM)[ExceptionCode]] - [DOM 3] Core Definition group [CODE(DOM)[ExceptionCode]] [95] ,定数名 ,定数値 ,説明 ,水準 ,[CODE(DOM)[[[DOMSTRING_SIZE_ERR]]]] ,[CODE(DOM)[2]] ,文の指定された範囲が [CODE(DOM)[[[DOMString]]]] に一致しません。 ,"DOM 1,2,3" ,[CODE(DOM)[[[HIERARCHY_REQUEST_ERR]]]] ,[CODE(DOM)[3]] ,[CODE(DOM)[[[Node]]]] がどこか所属しない場所に挿入しようとしています。 ,"DOM 1,2,3" ,[CODE(DOM)[[[INDEX_SIZE_ERR]]]] ,[CODE(DOM)[1]] ,索引または寸法が負か、認められる値を超えています。 ,"DOM 1,2,3" ,[CODE(DOM)[[[INUSE_ATTRIBUTE_ERR]]]] ,[CODE(DOM)[10]] ,すでにどこかで使われている属性を追加しようとしています。 ,"DOM 1,2,3" ,[CODE(DOM)[[[INVALID_ACCESS_ERR]]]] ,[CODE(DOM)[15]] ,引数または演算に当該物体は対応していません。 ,"DOM 2,3" ,[CODE(DOM)[[[INVALID_CHARACTER_ERR]]]] ,[CODE(DOM)[5]] ,不当または不法な文字が (例えば XML の[[名前]]中で) 指定されています。 ,"DOM 1,2,3" ,[CODE(DOM)[[[INVALID_MODIFICATION_ERR]]]] ,[CODE(DOM)[13]] ,当該物体の型を修正しようとしています。 ,"DOM 2,3" ,[CODE(DOM)[[[INVALID_STATE_ERR]]]] ,[CODE(DOM)[11]] ,使用可能でないか、既に使用不能な物体を使おうとしています。 ,"DOM 2,3" ,[CODE(DOM)[[[NAMESPACE_ERR]]]] ,[CODE(DOM)[14]] ,名前空間に関して不正な方法で物体を作成または変更しようとしています。 ,"DOM 2,3" ,[CODE(DOM)[[[NOT_FOUND_ERR]]]] ,[CODE(DOM)[8]] ,[CODE(DOM)[Node]] を存在しない文脈で参照しようとしています。 ,"DOM 1,2,3" ,[CODE(DOM)[[[NOT_SUPPORTED_ERR]]]] ,[CODE(DOM)[9]] ,要求された型の物体または演算に実装は対応していません。 ,"DOM 1,2,3" ,[CODE(DOM)[[[NO_DATA_ALLOWED_ERR]]]] ,[CODE(DOM)[6]] ,データに対応していない [CODE(DOM)[Node]] でデータを指定しています。 ,"DOM 1,2,3" ,[CODE(DOM)[[[NO_MODIFICATION_ALLOWED_ERR]]]] ,[CODE(DOM)[7]] ,修正が認められていない物体を修正しようとしています。 ,"DOM 1,2,3" ,[CODE(DOM)[[[SYNTAX_ERR]]]] ,[CODE(DOM)[12]] ,不当または不法な文字列が指定されています。 ,"DOM 2,3" ,[CODE(DOM)[[[TYPE_MISMATCH_ERR]]]] ,[CODE(DOM)[17]] ,物体の型が物体に関連付けられた引数の型として期待されるものと非互換です。 ,DOM 3 ,[CODE(DOM)[[[VALIDATION_ERR]]]] ,[CODE(DOM)[16]] ,[CODE(DOM)[Node]] が[[部分妥当性]]について不当となる操作をしようとしています。 ,DOM 3 ,[CODE(DOM)[[[WRONG_DOCUMENT_ERR]]]] ,[CODE(DOM)[4]] ,[CODE(DOM)[Node]] が作られたのと違う文書で使われています。 ,"DOM 1,2,3" , ,(その他) ,(W3C が将来の使用のために予約) ,"DOM 1 [ABBR[[[SE]]] [Second Edition]],2,3" * メモ [85] [CITE[IRC logs: freenode / #whatwg / 20100809]] ([TIME[2010-08-14 15:23:27 +09:00]] 版) [86] [CITE@@en[Web Applications 1.0 r5311 Make the structured clone algorithm using DATA_CLONE_ERR rather than NOT_SUPPORTED_ERR, for sicking.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10069]] ( ([TIME[2010-08-18 10:28:00 +09:00]] 版)) [87] [CITE@@en[Web Applications 1.0 r5416 Fix potential clash with File API.]] ( ([TIME[2010-09-07 04:28:00 +09:00]] 版)) [88] [CITE[IRC logs: freenode / #whatwg / 20100913]] ( ([TIME[2010-09-26 22:31:37 +09:00]] 版)) [89] [CITE@en[Web Applications 1.0 r5773 File API no longer uses DOMException]] ( ([TIME[2011-01-12 05:40:00 +09:00]] 版)) [90] [CITE[IRC logs: freenode / #whatwg / 20110427]] ( ([TIME[2011-04-30 12:39:26 +09:00]] 版)) [91] [CITE[Bug 10623 – Simplify Web IDL exceptions]] ( ([TIME[2011-06-28 23:02:06 +09:00]] 版)) [92] [CITE[IRC logs: freenode / #whatwg / 20110415]] ( ([TIME[2012-11-25 02:42:52 +09:00]] 版)) [93] [CITE[743888 – Replace SVGException and XPathException with DOMException]] ( ([TIME[2012-11-29 14:51:25 +09:00]] 版)) [96] [[Chrome]] は [CODE(DOMa)@en[[[name]]]] [[属性]]に [CODE(DOMe)@en[[[INUSE_ATTRIBUTE_ERR]]]] のような定数名を設定します。 [TIME[2012-12-20T14:58:23.700Z]] [97] [CITE[Bug 101606 – DOMException name is incorrect]] ( ([TIME[2012-12-20 15:20:56 +09:00]] 版)) [98] [[DOM Standard]] は新しい [CODE(DOMa)@en[[[name]]]] を廃止されていない[[例外]]の種類に対してしか定義していませんが、 >>97 は廃止されたものも含めて新しいスタイルの [CODE(DOMa)@en[[[name]]]] を実装しています。