DOM Implementation and Scriptability
出典: MDC
この記事は、Mozilla Japan 翻訳部門もしくはその関連グループによりすでに翻訳済みのものを移行してきました 移行元の文書。英語版と内容が異なる場合や、MDC の他の記事と整合性のとれていない場合があります。
目次 |
[編集] 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.allwas implemented for quirks mode documents - bug 248549) -
window.eventが無くて event オブジェクトのインターフェースが違う - IE では、広域名前空間内の id で要素が公開される (we do that too since Gecko 1.7.5 for quirks mode documents - bug 256932)
- 属性の検索順が違う (i.e. form.submit() and <input name="submit">)
カテゴリ: 移行 | NeedsContent