この記事は Mozilla Japan 翻訳部門または関連グループにより過去に翻訳された文書を移行したものです。 移行元の文書。よって、英語版と内容が異なる場合や、MDN の他の記事との整合性がとれていない場合があります。
DOM とは?
- 記述文書を操作するためのインターフェース
- DOM0 や NS3 と IE3 に代表される
- W3C DOM レベル 1 の中心機能 + HTML へと飛躍
- レベル 2、レベル 3 と続く
標準化されているのは?
- document オブジェクト
- 要素、テキスト ノード、コメント、style オブジェクトなど
- HTML DOM
- オブジェクト構造の解析による検索と検索範囲の規則
- ...
標準化されていないのは?
- window オブジェクト
- 専用の属性
document.all
document.location
element.offset*
element.innerHTML
element.scroll*
...
- JS 主義
- 引数の数と種類が可変
- document オブジェクトと form オブジェクト内での動的な要素検索
- 範囲と検索の順番
Mozilla の DOM
- W3C DOM 互換への努力
- 旧バージョンとの互換の努力 (document.layers を除く)
- Mozilla DOM オブジェクトは XPCOM オブジェクト
- XPIDL インターフェースのうち 「nsIDOM」 で始まるものは仕様が確定済
- DOM オブジェクトは参照数が記憶され、DOM オブジェクトの入れ物の寿命は JS GC が管理
Mozilla の document 階層
- 文書クラス
- nsDocument と nsHTMLDocument と nsXULDocument
- 内部のインターフェースは nsIDocument
- 要素クラス
- nsGenericElement (nsGenericContainerElement) nsHTML*Element、nsXMLElement、nsXULElement
- 内部のインターフェースは nsIContent の friend クラス
- データ ノード クラス
- nsGenericDOMDataNode
- nsTextNode, nsCommentNode, nsCDATASection, nsProcessingInstruction, nsDocumentType, ...
- 内部のインターフェースは nsITextContent (nsIContent)
- 「Tearoff」 クラス
- 3Node と要素上の EventTarget とデータ ノード
Mozilla の window オブジェクト
- nsIDOMWindow, 仕様が確定した公式なインターフェース
- nsIDOMWindowInternal, 内部のインターフェース、未確定
- nsIDOMChromeWindow, # chrome 仕様のウィンドウインターフェース
- nsIDOMJSWindow, JS 仕様のウィンドウ フック
Mozilla のスクリプト可能化
- DOM オブジェクト を JS 環境のまま使う目的で、静的に生成された C/C++ コード (IDLC) と一緒に使われる技術
- XPConnect と 追加の JS 仕様対応コードでできるようになった
XPConnect と DOM
- XPConnect - XPCOM と JS の仲立ち役
- 参照数/GC メモリ管理形式を使用
nsIClassInfo
公開するもの:
- クラス名
- 実装済みのインターフェース
- 言語ごとの補助
- クラスのフラグ (スレッド、一意性、……)
スクリプト可能化補助
- nsIXPCScriptable(XPConnect フック、JS 仕様)
- 未知の名前の動的な検索
- 属性の取得、設定、列挙やフック
スクリプト可能化補助、子弟化
- JS オブジェクトの親をたどると DOM オブジェクトと同じ
- 親が無い DOM オブジェクト は広域オブジェクトが親になる
スクリプト可能化補助、自動の型設定
- DOM の既定の自動連鎖 (XPConnect が処理)
XPC wrapper -> XPC wrapper proto -> Object
- 補助有りの場合
XPC wrapper -> XPC wrapper proto -> [class proto]* -> Object
安全性と DOM
- セキュリティの基本は操作元の身元一致の原則
- オブジェクトすべてについて安全確認がなされる
- 広域的なスクリプト操作用の特別な安全コード
Mozilla の DOM 対 IE の DOM
- Gecko 1.7.5 以前に
document.all
はない (undetectabledocument.all
was implemented for quirks mode documents - バグ 248549) -
window.event
が無くて event オブジェクトのインターフェースが違う - IE では、広域名前空間内の id で要素が公開される (we do that too since Gecko 1.7.5 for quirks mode documents - バグ 256932)
- 属性の検索順が違う (i.e. form.submit() and <input name="submit">)
Original Document Information
- Author: Johnny Stenback