DOM Implementation and Scriptability

この記事は 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 オブジェクト

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 はない (undetectable document.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

Document Tags and Contributors

Contributors to this page: Yama, Shimono
最終更新者: Yama,