/
174.txt
136 lines (100 loc) · 7.04 KB
/
174.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
[12] [CODE(HTMLe)@en[[[script]]]] [[要素]]の [DFN[[CODE(HTMLa)@en[[[async]]]]]]
[[属性]]は、[[外部スクリプト資源]]を[[非同期的]]に取得して、
その準備ができ次第実行するべきことを表します。
* 仕様書
[REFS[
- [1] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-02-16 01:30:20 +09:00]] 版) <https://html.spec.whatwg.org/#the-script-element>
-- [2] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-02-21 07:50:23 +09:00]] 版) <https://html.spec.whatwg.org/#attr-script-async>'''
-- [13] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-02-21 07:50:23 +09:00]] 版) <https://html.spec.whatwg.org/#dom-script-async>
-- [32] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-02-21 07:50:23 +09:00]] 版) <https://html.spec.whatwg.org/#non-blocking>
]REFS]
* 意味
[3] [CODE(HTMLa)@en[[[async]]]] [[属性]]は、[[スクリプト]]がどう評価されるか指定するものです
[SRC[>>2]]。
[6] [[古典スクリプト]]の場合、[[構文解析]]と[[並列に]]
[[fetch]] が行われてから、準備ができ次第すぐに ([[構文解析]]が未完であっても)
評価することを求めるものです。指定されなかった場合は
[CODE(HTMLa)@en[[[defer]]]] [[属性]]の指示によります。 [SRC[>>2]]
[7] [[モジュールスクリプト]]の場合、
[[モジュールスクリプト]]およびその依存物は[[構文解析]]と[[並列に]]
[[fetch]] が行われてから、準備ができ次第すぐに ([[構文解析]]が未完であっても)
評価することを求めるものです。指定されなかった場合も[[構文解析]]と[[並列に]]
[[fetch]] が行われますが、評価は[[構文解析]]が完了してからとなります。 [SRC[>>2]]
* 文脈
[4] [CODE(HTMLe)@en[[[script]]]] [[要素]]の種別が[[古典スクリプト]]や[[モジュールスクリプト]]の時、
指定できます [SRC[>>2]]。
[9] [CODE(HTMLe)@en[[[script]]]] [[要素]]の種別が[[データブロック]]の時は、
[CODE(HTMLa)@en[[[async]]]] [[属性]]を使っては[['''なりません''']] [SRC[>>1]]。
* 処理
[5] [CODE(HTMLe)@en[[[script]]]] 参照。
[33] [CODE(HTMLa)@en[[[async]]]] [[属性が追加]]された時、
[CODE(HTMLe)@en[[[script]]]] [[要素]]の[F[[[「非ブロッキング」]]フラグ]]が設定されていたら、
そのフラグを削除しなければ[['''なりません''']] [SRC[>>32]]。
[28] なお、初回処理時の値が使われるので、動的に変更しても、意味を持ちません [SRC[>>2]]。
* [CODE(DOMi)@en[HTMLScriptElement]] インターフェイス [CODE(DOMa)@en[async]] 属性
[15] [CODE(DOMi)@en[[[HTMLScriptElement]]]] [[インターフェイス]]の
[DFN[[CODE(DOMa)@en[[[async]]]]]] [[IDL属性]]は、
[[スクリプト]]が[[非同期的]]に実行されるかどうかを表します [SRC[>>13]]。
[16] [[取得時]]には、次のようにしなければ[['''なりません''']] [SRC[>>13]]。
[FIG(steps)[
= [17] [[文脈オブジェクト]]の[F[[[「非ブロッキング」]]フラグ]]が設定されていれば、
== [18] [[真]]を返します。
= [26] それ以外なら、
== [27] [CODE(HTMLa)@en[[[async]]]] [[内容属性]]を[[ブール値]]として[[反映]]する[[IDL属性]]の[[取得器]]の処理を行います。
]FIG]
[19] [[設定時]]には、[VAR[指定値]]について次のようにしなければ[['''なりません''']] [SRC[>>13]]。
[FIG(steps)[
= [20] [[文脈オブジェクト]]の[F[[[「非ブロッキング」]]フラグ]]が設定されていれば、
== [21] [[文脈オブジェクト]]の[F[[[「非ブロッキング」]]フラグ]]を削除します。
== [22] [VAR[指定値]]が[[真]]なら、
=== [23] [[文脈オブジェクト]]の [F[[CODE(HTMLa)@en[[[async]]]] [[内容属性]]]]を、
[[空文字列]]に設定します。
== [24] それ以外なら、
=== [25] [[文脈オブジェクト]]の [F[[CODE(HTMLa)@en[[[async]]]] [[内容属性]]]]を削除します。
= [29] それ以外なら、
== [30] [CODE(HTMLa)@en[[[async]]]] [[内容属性]]を[[ブール値]]として[[反映]]する[[IDL属性]]の[[設定器]]の処理を[VAR[指定値]]について行います。
]FIG]
;; [31] [CODE(HTMLa)@en[[[async]]]] [[属性の追加]]では[[「非ブロッキング」フラグ]]が削除されることになっていますが、
本[[設定器]]経由の場合は[[属性]]が変更されない場合や削除される場合も[[「非ブロッキング」フラグ]]が削除されることになります。
* 関連
[11] [CODE(HTMLa)@en[[[defer]]]] も参照。
* 歴史
[8] [CITE[IRC logs: freenode / #whatwg / 20091009]]
([TIME[2009-12-08 00:45:57 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20091009>
[10] [CITE@en[Last Week: Asynchronous script execution and GPU Acceleration by default « Peter Beverloo]]
( ([TIME[2010-09-26 23:09:35 +09:00]] 版))
<http://peter.sh/2010/09/last-week-asynchronous-script-execution-and-gpu-acceleration-by-default/>
[14] [CITE@en[Bug 22696 – inline <script async>]]
( ([TIME[2014-09-28 09:03:14 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=22696>
[43] [CITE@en[Add <script type="module"> and module resolution/fetching/evaluation · whatwg/html@cd1a9fb]]
([TIME[2016-01-21 22:16:06 +09:00]] 版)
<https://github.com/whatwg/html/commit/cd1a9fb1e83f7d0bc30be8b34ecdaf444a0b19a4>
[34] [CITE@en[(Re)disallow script defer/async attributes w/o src]]
([[sideshowbarker]]著, [TIME[2017-04-05 21:04:55 +09:00]])
<https://github.com/whatwg/html/commit/3c5180a08f90a375c64f8191f32f8c7ddfec0ba3>
[35] [CITE@en[Fix authoring guidance to allow async="" on inline module scripts]]
([[domenic]]著, [TIME[2018-01-06 03:37:30 +09:00]])
<https://github.com/whatwg/html/commit/271f19c34786db04a17c16c24807a33113894a68>
[36] [CITE@en[async="" should be allowed on inline module scripts · Issue #3319 · whatwg/html]]
([TIME[2018-02-26 00:11:03 +09:00]])
<https://github.com/whatwg/html/issues/3319>
[37] [CITE@en[Fix authoring guidance to allow async="" on inline module scripts by domenic · Pull Request #3324 · whatwg/html]]
([TIME[2018-02-26 00:11:25 +09:00]])
<https://github.com/whatwg/html/pull/3324>
[38] [CITE@en[Integrate Feature Policy: "sync-xhr"]]
([[clelland]]著, [TIME[2018-03-03 03:22:56 +09:00]])
<https://github.com/whatwg/xhr/commit/67a423f9f5d95ee240d48d4cf82c57e2d33876a2>
[39] [CITE@en[Allow developers to opt-out of sync XHR with feature policy · Issue #178 · whatwg/xhr]]
([TIME[2018-03-03 12:49:30 +09:00]])
<https://github.com/whatwg/xhr/issues/178>
[40] [CITE@en[Integrate feature policy by clelland · Pull Request #177 · whatwg/xhr]]
([TIME[2018-03-03 12:52:31 +09:00]])
<https://github.com/whatwg/xhr/pull/177>
[41] [CITE@en[Feature proposal: sync-xhr · Issue #126 · WICG/feature-policy]]
([TIME[2018-03-03 12:55:41 +09:00]])
<https://github.com/WICG/feature-policy/issues/126>
[42] [CITE@en[New in Chrome 65 | Web | Google Developers]]
([TIME[2018-03-08 23:09:17 +09:00]])
<https://developers.google.com/web/updates/2018/03/nic65>