Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

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

ドキュメントのタグと貢献者

タグ: 
 このページの貢献者: Yama, Shimono
 最終更新者: Yama,