キャプチャリングとバブリング Safari・Opera編
キャプチャリングとバブリング Firefox編 - 文殊堂の追加調査
Firefox2と同様SafariとOperaでも検証用HTMLで検証してみました。
Safari3.1(Win版)
Firefox2とまったく同じ動作でした。
Opera9.26
Firefox2と結果が異なりました。
(1)-外側クリック
表示されず
(1)-内側クリック
eventPhase:1,target:inner1,currentTarget:outer1
(2)-外側クリック
eventPhase:2,target:outer2,currentTarget:outer2
(2)-内側クリック
eventPhase:2,target:inner2,currentTarget:inner2 eventPhase:3,target:inner2,currentTarget:outer2
(3)-外側クリック
eventPhase:2,target:outer3,currentTarget:outer3
(3)-内側クリック
eventPhase:1,target:inner3,currentTarget:outer3 eventPhase:2,target:inner3,currentTarget:inner3 eventPhase:3,target:inner3,currentTarget:outer3
Firefox・SafariとOperaの相違点
useCaptureにtrueを指定してイベントハンドラを設定した場合に、
FirefoxとSafariではキャプチャリングフェーズ及び該当要素自身がターゲットノードである時イベントハンドラが実行されますが、
Operaではキャプチャリングフェーズでのみイベントハンドラが実行され、
該当要素自身がターゲットノードの時はイベントハンドラが実行されないということのようです。
Operaだけ仕様を満たしていないのかと思って、DOMレベル2イベント仕様を見てみた所、
EventTarget上に登録されているEventListenerは,addEventListenerメソッドのuseCaptureパラメタをtrueに指定することによって,そのEventListenerにイベントを捕獲させることを選択してもよい。この後,捕獲オブジェクトの子孫に向けて与えられた型のイベントを送り付ける場合には,そのイベントは,文書の最上位とイベントのターゲットとの間の直接につながっている線に存在する適切な型の捕獲イベントリスナを誘発する。この下方への伝達は,イベントのターゲットに到達するまで継続される。捕獲EventListenerは,それが登録されているEventTargetへ直接的に送り付けられたイベントによっては誘発されない。
どうも逆にOperaのみ仕様に準拠しているようです。