-
Notifications
You must be signed in to change notification settings - Fork 4
/
563.txt
115 lines (84 loc) · 6.29 KB
/
563.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
[4] [DFN[[RUBYB[[[イベントリスナー]]]@en[event listener]]]]は特定の[[イベント]]に[[コールバック]]を関連付けるものです [SRC[>>3]]。
;; [27] [[イベントハンドラー]]とは異なります。[[イベントハンドラー]]は、
[[イベントリスナー]]の特殊形です。
* 仕様書
[REFS[
- [3] [CITE@en-US[DOM Standard]] ([TIME[2013-04-26 20:00:45 +09:00]] 版) <http://dom.spec.whatwg.org/#interface-eventtarget>
- [22] [CITE@en-US[DOM Standard]] ([TIME[2014-11-27 19:54:36 +09:00]] 版) <https://dom.spec.whatwg.org/#concept-event-listener-invoke>
]REFS]
* メンバー
[5] [[イベントリスナー]]は、次のもので構成されます。
[FIG(list members)[
:[F[[RUBYB[[[イベント型]]]@en[event type]]]] [SRC[>>3]]:
[[コールバック]]を呼び出すべき[[イベント型]]です。文字列で1つだけ指定できます。
:[F[[RUBYB[[[コールバック]]]@en[callback]]]] [SRC[>>3]]:
実際に呼び出される[[コールバック関数]]です。
:[F[[RUBYB[[[捕獲]]]@en[capture]]]] [SRC[>>3]]:
[[コールバック]]を[[捕獲]]段階で呼び出すべきなら[[真]]、[[bubble]] 段階で呼び出すべきなら[[偽]]のフラグです。
: [F[[RUBYB[受動的]@en[passive]]]] :
[[イベント]]を[[取消]]する可能性があるかどうかを指定します。
[[利用者エージェント]]はこの情報を処理の最適化のために使うことができます。
:[F[[RUBYB[削除済みフラグ]@en[removed flag]]]] [SRC[>>3]]:
[CODE(DOMm)@en[[[removeEventListener]]]] で削除されたかどうかを表します。
]FIG]
* [CODE(DOMi)@en[EventListener]]
[6] [CODE(IDL)@en[[[callback interface]]]] である [DFN[[CODE(DOMi)@en[[[EventListener]]]]]]
は、[[イベントリスナー]]として登録する[[コールバック]]のための[[インターフェイス]]です。
[7] [[JavaScript]] では [CODE(DOMi)@en[[[Function]]]] を直接[[コールバック]]として使うことができます。
;; [28] [[JavaScript]] ではほとんどすべての場合、この形が採られます。
[8] [[オブジェクト]]を[[コールバック]]として使う[[言語束縛]]では、
[DFN[[CODE(DOMm)@en[[[handleEvent]]]]]] [[メソッド]]を持ったオブジェクトとする必要があります。
[9] いずれにせよ、[[コールバック]]には [CODE(DOMi)@en[[[Event]]]] が1つ引数として引き渡されます。
;; [10] [[DOM2]] や [[DOM3]] 初期は [[WebIDL]] を使っていなかったので、通常の
[CODE(IDL)@en[[[interface]]]] として定義されていました。そのため >>8 のようになっています。
[11] この [CODE(DOMi)@en[[[EventListener]]]] は >>5 の[[イベント・リスナー]]の定義における[[コールバック]]として使われることになります。
[CODE(DOMi)@en[[[EventListener]]]] 自体は[[イベント・リスナー]]でないことになりますが、
この用語のずれは歴史的経緯によるもの [SRC[>>3]] と説明されています。
* 例外
[23] [[イベントリスナー]]内部で発生し[[捕捉]]されていない[[例外]]があった場合、
[[Webブラウザー]]は[[例外を報告]]します [SRC[>>22]]。
[24] [[例外を報告]]しても[[ディスパッチ]]の処理は継続されます。
他の[[イベントリスナー]]の処理は影響を受けません。
* イベントリスナーのリスト
[26] [[イベント対象]]の[[オブジェクト]]は、[[イベントリスナー]]のリストを持ちます。
[CODE(DOMm)@en[[[addEventListener]]]] によって[[イベントリスナー]]を追加し、
[CODE(DOMm)@en[[[removeEventListener]]]] により削除することができます。
;; [[イベント対象]]を参照。
* イベントリスナーによる動作の変化
[13] [[イベントリスナー]]によって [[Webブラウザー]]の挙動が変化することがあります。
例えば[[デバイス]]の動作に関する[[イベント]]は、当該[[イベントリスナー]]が一つも登録されていなければ、
[[発火]]してもしなくても変わらないので、[[発火]]しないことによって電力消費や処理時間を節約できるかもしれません。
このような[[文書]]からも[[利用者]]からもまったく観測できない変化は別として、
次のような[[利用者]]から観測可能な変化が規定されています。
;; [21] [[著者]]からは観測できません。
[FIG(list)[
- [14] [[unstyled document]] の定義
-- [[イベント・リスナー]]が登録されていれば、 [[unstyled document view]] は使われません。
- [15] [[bfcache]] の利用可能性
- [16] [CODE(DOMi)@en[[[EventSource]]]] の[[ごみ収集]]
- [17] [[[CODE(DOMi)@en[WebSocket]]のごみ収集]]
- [19] [CODE(DOMi)@en[[[Notification]]]] の[[ごみ収集]]
-- [20] [CITE@en-US[Notifications API Standard]] ([TIME[2014-02-11 16:20:34 +09:00]] 版) <http://notifications.spec.whatwg.org/#garbage-collection>
]FIG]
* 関連
[12] [[イベントハンドラー]]も参照。
* 歴史
[REFS[
-[1] [CITE[IRC logs: freenode / #whatwg / 20120319]]
( ([TIME[2012-03-25 22:53:56 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120319>
-[2] [CITE['''['''whatwg''']''' Detecting eventListeners]]
([TIME[2012-06-14 09:13:58 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-June/036398.html>
- [25] [CITE@en[If an event listener callback throws, report the exception (window.onerr... · 55f7dbf · whatwg/dom]] ([TIME[2014-11-30 14:49:15 +09:00]] 版) <https://github.com/whatwg/dom/commit/55f7dbf200bfb63a26f66a3875dc6f9d402c7728>
]REFS]
[18] [CITE[IRC logs: freenode / #whatwg / 20140409]]
( ([TIME[2014-04-10 13:28:16 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140409>
** [CODE(DOMi)@en[EventListenerOptions]]
[35] [CITE@en[EventListenerOptions]]
([TIME[2015-07-06 23:03:09 +09:00]] 版)
<http://rbyers.github.io/EventListenerOptions/EventListenerOptions.html>
[36] [CITE@en[''''''[''''''whatwg'''''']'''''' DOM Events Proposal: EventListenerOptions 'mayCancel' for improved scroll performance]]
([[Rick Byers]] 著, [TIME[2015-07-09 04:12:36 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-whatwg-archive/2015Jul/0018.html>