-
Notifications
You must be signed in to change notification settings - Fork 4
/
640.txt
90 lines (68 loc) · 5.02 KB
/
640.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
[2] 本項では [[Web]] における[[モーダルダイアログ]]について扱います。
* 仕様書
[REFS[
- [1] '''[CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#user-prompts>'''
- [12] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#termination-nesting-level>
- [17] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-09-08 18:15:51 +09:00]] 版) <https://html.spec.whatwg.org/#attr-iframe-sandbox-allow-modals>
- [16] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-09-08 18:15:51 +09:00]] 版) <https://html.spec.whatwg.org/#sandboxed-modals-flag>
]REFS]
* モーダルダイアログの一覧
[3] [[Web]] には次の[[著者]]による[[モーダルダイアログ]]が存在します。
[FIG(short list)[
- [CODE(JS)@en[[[alert()]]]]
- [CODE(JS)@en[[[conform()]]]]
- [CODE(JS)@en[[[prompt()]]]]
- [CODE(DOMe)@en[[[beforeunload]]]]
- [CODE(JS)@en[[[window.print]]]]
- [CODE(JS)@en[[[showModalDialog]]]]
- [CODE(HTMLe)@en[[[dialog]]]] [[要素]]の [CODE(DOMa)@en[[[openModal]]]]
- [[HTTP認証]]
-- [[起源サーバー]]の[[認証]]
-- [[プロキシ]]の[[認証]]
- [[TLSクライアント認証]]
]FIG]
[4] 最初の3つは [[Netscape Navigator]] の [[JavaScript]] に初期から含まれていたものです。
次の3つは [[IE]] が実装し、他の [[Webブラウザー]]も追随しました。
これらはいずれも [[HTML Standard]] によって初めて標準化されました。
[[イベントループ]]の [[pause]] (最初の5つ) や[[スピン]] ([CODE(DOMm)@en[[[showModalDialog]]]])
を伴う、[RUBY[今日][こんにち]]から見ると特殊な仕組みを採用しています。
[5] [CODE(HTMLe)@en[[[dialog]]]] [[要素]]は [[HTML Standard]] によって追加されたもので、
[[CSS]] などによる近代的な仕組みで実現されていて、
[[イベントループ]]の特殊な制御を伴いません。
[7] [[利用者エージェント]]には他にも次の[[モーダルダイアログ]]が存在します。
[FIG(short list)[
- [[非安全]]な [CODE(JS)@en[[[location.reload]]]]
]FIG]
[13] [[イベントループ]]は、 [DFN[[[termination nesting level]]]] を持ちます [SRC[>>12]]。
その初期値は0です [SRC[>>12]]。
この値は、 [CODE(DOMe)@en[[[beforeunload]]]] [[イベント]]や
[CODE(DOMe)@en[[[unload]]]] [[イベント]]の処理中には[[正]]になります。
この値が[[正]]の時、[CODE(JS)@en[[[alert()]]]]、[CODE(JS)@en[[[prompt()]]]]、
[CODE(JS)@en[[[confirm()]]]]、[CODE(DOMm)@en[[[showModalDialog]]]]
は何もしなくて良いことになっています。
* モーダル性
[6] かつては[[モーダルダイアログ]]によって[[Webブラウザー]]全体がブロックされるのが普通でしたが、
徐々に緩和され、 [[タブ]]や[[関係する類似起源閲覧文脈の単位]]の範囲のみでブロックされるようになってきています。
[14] 最近の [[Webブラウザー]]は、[[モーダルダイアログ]]の表示中は関係する[[閲覧文脈]]を半透明の黒色で上から塗るなど、
入力を受け付けていないことを明確化する方法で[[レンダリング]]するようになっています。
;; [[pause]] も参照。
* モーダルダイアログの停止
[9] [[ブラクラ]]目的等[[利用者]]にとって迷惑な[[モーダルダイアログ]]の利用を防ぐため、
最近の [[Webブラウザー]]は[[モーダルダイアログ]]の過度な表示を抑制する機能が備わっています。
[EG[
[10] 例えば [[Webブラウザー]]によっては、複数回同じ[[モーダルダイアログ]]が表示された時に以後表示しない[[チェックボックス]]を表示します。
]EG]
[EG[
[11] 例えば [[Webブラウザー]]によっては、[[モーダルダイアログ]]が表示された時に[[スクリプト]]の実行を停止させることができます。
]EG]
[18] [[砂箱化]]時に [DFN[[CODE(DOM)@en[[[allow-modals]]]]]] [[キーワード]]
[SRC[>>17]] が指定されなければ、[[砂箱化フラグ集合]]の [DFN[[[sandboxed modals flag]]]]
[SRC[>>16]] が設定されます。このフラグが設定されていれば、
[[モーダルダイアログ]]は表示されません。
;; [19] ただし[[認証]]の[[モーダルダイアログ]]と [CODE(HTMLe)@en[[[dialog]]]]
[[要素]]の[[ダイアログ]]は、本フラグの適用対象にはなっていません。
* メモ
[8] [CITE[Part2 - browsersec - Browser Security Handbook, part 2 - Browser Security Handbook - Google Project Hosting]]
([TIME[2015-03-31 16:48:10 +09:00]] 版)
<https://code.google.com/p/browsersec/wiki/Part2#Popup_and_dialog_filtering_logic>
[15] [CITE@en[Block modal dialogs by default in sandboxed documents · whatwg/html@bbccfc9]] ([TIME[2015-09-09 23:54:45 +09:00]] 版) <https://github.com/whatwg/html/commit/bbccfc976754def0c187ac8ce5891d2fb20dfc15>