[5] [DFN[[RUBYB[[[変異観察器]]]@en[mutation observer]]]]は、 [[DOM]] の変化の通知を[[スクリプト]]が ([[コールバック]]として) 受け取るための仕組みです。 * 仕様書 [REFS[ - [7] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-03-28 21:58:58 +09:00]] 版) ]REFS] * 処理モデル ** マイクロタスク・チェックポイント [6] [[イベント・ループ]]の処理の中などで[RUBYB[[[マイクロタスク・チェックポイント]]]@en[microtask checkpoint]]の[[算法]]が呼ばれます。 [12] [[利用者エージェント]]は次のように[DFN[[RUBYB[[[マイクロタスク・チェックポイントを行う]]]@en[perform a microtask checkpoint]]]][['''必要''']]があります [SRC[>>7]]。 [FIG[ = [8] [[変異観察器が走っているフラグ]]が[[偽]]なら、 == [9] [[変異観察器が走っているフラグ]]を[[真]]にします。 == [22] [RUBYB[[[未完の整列について表を整列]]]@en[sort the tables with pending sorts]]します。 == [10] [[スクリプトの閲覧文脈]]が所属している[[関連する類似起源閲覧文脈の単位]]の[[[CODE(DOMi)@en[MutationObserver]]オブジェクトを呼び出し]]します。 ==- [11] これによって[[コールバック]]の[[スクリプト]]が[[発火]]されたりするわけですが、 その際 [[jump to a code entry-point]] [[算法]]が呼ばれ、その中で再度この[[算法]]が呼ばれることになるので、 [[変異観察器が走っているフラグ]]でチェックして再実行しないようにしています。 == [13] [[変異観察器が走っているフラグ]]を[[偽]]にします。 ]FIG] [15] [[マイクロタスク・チェックポイントを行う]]のは次の場面です。 [FIG[ = [16] [[イベント・ループ]]の1ステップとして = [17] [[jump to a code entry-point]] ([[スクリプト]]実行) の1ステップとして = [18] [[HTML]] [CODE(HTMLe)@en[[[script]]]] [[要素]]の[[終了タグ]]の処理の1ステップとして ;; [19] [[SVG]] [CODE(XMLe)@en[[[script]]]] [[要素]]でも同様に呼び出されるものと推察されますが、 現時点で [[SVG]] [CODE(XMLe)@en[[[script]]]] [[要素]]の処理モデルを詳細に規定した仕様がありません。 ]FIG] * 歴史 [4] [[変異観察器]]は、[[変異イベント]]の代替として考案され、 [[DOM4]] 仕様に取り込まれました。 [REFS[ - [1] [CITE[IRC logs: freenode / #whatwg / 20120228]] ( ([TIME[2012-03-08 00:01:17 +09:00]] 版)) - [2] [CITE@en[Re: ''''''[''''''dom'''''']'''''' mutation observers and HTML]] ( ([[Olli Pettay]] 著, [TIME[2012-02-18 00:51:23 +09:00]] 版)) - [3] [CITE[IRC logs: freenode / #whatwg / 20120320]] ( ([TIME[2012-03-29 23:32:57 +09:00]] 版)) - [14] [CITE[Bug 17988 – The term microtask should be defined]] ( ([TIME[2012-07-21 17:51:05 +09:00]] 版)) - [21] [CITE@en[Web Applications 1.0 r7597 New feature: sorting tables. The actual sort algorithm isn't done yet, but this should be a good start for first draft reviewers.]] ([TIME[2012-12-27 08:58:00 +09:00]] 版) ]REFS] ** 構文解析器と変異観察器 [REFS[ - [20] [CITE@en[Web Applications 1.0 r7484 The parser should have mutation observers.]] ([TIME[2012-10-24 07:24:00 +09:00]] 版) ]REFS]