[4] [DFN[[CODE(DOMe)@en[[[visibilitychange]]]]]] [[イベント]]は[[文書]]の可視性が変化した時に[[発火]]されます。 * 仕様書 [REFS[ - [2] [CITE@en[Page Visibility]] ([TIME[2013-05-20 14:37:13 +09:00]] 版) ]REFS] * 可視状態への変化 [5] 可視状態に変化するときには、 [DFN[[[now visible algorithm]]]] を実行しなければ[['''なりません''']]。 これはすなわち、 [CODE(JS)@en[[[document.hidden]]]] を [CODE[[[false]]]] にし、 [CODE(DOMa)@en[[[visibilityState]]]] を [CODE(DOM)@en[[[visible]]]] にした上で、 [CODE(DOMi)@en[[[Document]]]] において [[bubble]] する [CODE(DOMe)@en[[[visibilitychange]]]] [[単純イベントを発火]]することとなります。 [[session history entry]] への[[探索]]にあっては [CODE(DOMe)@en[[[pageshow]]]] [[イベント]]の[[発火]]の直前に、それ以外の場合にあっては[[タスクをキューに入れる]]ことによって行います。 [SRC[>>2]] ;; [6] [[タスク源]]はなぜか規定されていません。 ;; [10] >>7 は[[文書をunload]]する途中で [[HTML Standard]] 側にフックがありますが (>>1 で追加)、なぜ >>5 で同様のフックを用意していないのか謎です。 * 不可視状態への変化 [7] 不可視状態に変化するときには、 [DFN[[[now hidden algorithm]]]] を実行しなければ[['''なりません''']]。 これはすなわち、 [CODE(JS)@en[[[document.hidden]]]] を [CODE[[[true]]]] にし、 [CODE(DOMa)@en[[[visibilityState]]]] を変更した上で、 [CODE(DOMi)@en[[[Document]]]] において [[bubble]] する [CODE(DOMe)@en[[[visibilitychange]]]] [[単純イベントを発火]]することとなります。 [[文書をunload]]する途中であれば[DFN[[RUBYB[unload文書可視性変更手順]@en[unloading document visibility change steps]]]] ([CODE(DOMe)@en[[[pagehide]]]] [[イベント]]の[[発火]]の直後) において、 それ以外の場合にあっては[[タスクをキューに入れる]]ことによって行います。 [CODE(DOMe)@en[[[visibilityState]]]] の新しい値は前者なら [CODE(DOM)@en[[[unloaded]]]]、 後者なら [CODE(DOM)@en[[[hidden]]]] ですが、 [CODE(DOM)@en[[[unloaded]]]] に対応しない場合には 両方 [CODE(DOM)@en[[[hidden]]]] でも構いません。 [SRC[>>2]] ;; [8] なぜわざわざ [CODE(DOM)@en[[[unloaded]]]] でなくても良いことになっているのでしょう。 実装の都合上区別できない[[Webブラウザー]]があるんでしょうかね。 ;; [9] [[タスク源]]はなぜか規定されていません。 * 歴史 [3] [CODE(DOMe)@en[[[visibilitychange]]]] [[イベント]]は [[Page Visibility]] によって追加されました。 [REFS[ -[1] [CITE@en[Web Applications 1.0 r7010 Provide a hook for the Page Visibility spec.]] ( ([TIME[2012-03-01 07:39:00 +09:00]] 版)) ]REFS] [11] [[vendor prefix]] のついた [DFN[[CODE(DOMe)@en[[[webkitvisibilitychange]]]]]]、 [DFN[[CODE(DOMe)@en[[[mozvisibilitychange]]]]]]、[DFN[[CODE(DOMe)@en[[[msvisibilitychange]]]]]] も実装されていました。 [12] [CITE@en[Re: ''''''[''''''Page Visibility'''''']'''''' Navigate away behavior (was RE: TPAC 2011 Web Performance WG 2011-11-01)]] ( ([[Sreeram Ramachandran]] 著, [TIME[2012-05-16 00:30:10 +09:00]] 版))