/
122.txt
121 lines (95 loc) · 7.32 KB
/
122.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
* 仕様書
[REFS[
- [12] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#dom-location-reload>
]REFS]
* 再読み込み
[4] [[Webブラウザー]]は通常[[再読み込み]]機能を実装しています。これはおおむね
[CODE(JS)@en[[[location.reload]]]] に相当するものです。
[5] [[GUI]] 環境で動作する [[Webブラウザー]]は普通[[ツールバー]]などに[[再読み込み]]ボタンを設けています。
[6] [[Windows]] で動作する [[Webブラウザー]]の多くは [KBD[[[F5]]]] や
[KBD[[[Ctrl]] + [[R]]]] で[[再読み込み]]が実行されます。
[8] [[Webサイト]]によっては、[[利用者]]が [KBD[[[F5]]]] によって[[再読み込み]]を実行することを避けるために[[鍵盤イベント]]を[[取り消し]]することでこれを無効化していることがあります。
誤操作や安易な [[DoS攻撃]]を避けるために有用なこともありますが、
多くの場合は[[利用者]]の利便性を低下させるだけであり、好ましくない挙動と思われています。
[7] 多くの [[Webブラウザー]]は[[スーパーリロード]]も実装しています。
;; [[スーパーリロード]]参照。
[14] [[利用者]]が[[閲覧文脈]]の[[活性文書]]の[RUBYB[[[再読込]]]@en[reload]]を求めたら、
次のようにする[['''べきです''']] [SRC[>>12]]。
この時[[利用者]]が[VAR[キャッシュ上書き]]を指示できても構いません。
[FIG(steps)[
= [15] [[閲覧文脈]]の[[活性文書]]の [[fetch]] の際の[[要求メソッド]]が[[冪等メソッド]]でないなら、
[[利用者]]に確認します [SRC[>>12]]。
= [16] [[利用者]]が拒んだら、ここで停止します [SRC[>>12]]。
= [17] [[閲覧文脈]]の[[活性文書]]の [[reload override flag]] が設定されているなら、[[利用者エージェント]]の判断により、
== [18] [[overridden reload]] を実行します。[[原始閲覧文脈]]は[[閲覧文脈]]とします。 [SRC[>>12]] [VAR[キャッシュ上書き]]も引き渡します。
= [19] それ以外なら、
== [20] [[navigate]] します。 [SRC[>>12]]
[FIG(list members)[
:[[navigate]] する[[閲覧文脈]]:[[閲覧文脈]]
:新しい[[資源]]:[[閲覧文脈]]の[[活性文書]]と同じ
:[[置換有効]]:[[真]]
:キャッシュ上書き:[VAR[キャッシュ上書き]]の[[真偽]]による
]FIG]
]FIG]
;; [21] 再読込する[[資源]]やその[[要求メソッド]]は、[[閲覧文脈]]の当該[[セッション履歴エントリー]]の指定に拠ります。
** 安全性
[9] [[再読み込み]]によって[[要求]]を再度実行しても[[安全]]かどうかは、
[[要求メソッド]]に依存します。 [CODE(HTTP)@en[[[GET]]]] は[[安全]]ですが、
[CODE(HTTP)@en[[[POST]]]] は[[安全]]ではありません。
[10] [[Webブラウザー]]は[[非安全]]な[[要求]]を[[再読み込み]]する前に[[利用者]]に[[モーダルダイアログ]]によって[[再読み込み]]を本当に実行するか確認するのが普通です。
;; [11] [[安全なメソッド]]も参照。
;; [23] [[冪等なメソッド]]であっても、[[再読込]]までの間に自身または他者により他の操作が行われていた場合、
元とは異なる結果になるかもしれません。[[冪等なメソッド]]であっても[[安全なメソッド]]でなければ、
確認するべきかもしれません。ただし現在の [[Web]] で [[navigate]]
可能な[[要求メソッド]]の中では、[[冪等]]で[[非安全]]なものはありませんから、
問題とはなりません。 ([[Web Forms 2.0]] を実装していた [[Webブラウザー]]では
[CODE(HTTP)@en[[[PUT]]]] と [CODE(HTTP)@en[[[DELETE]]]] への [[navigate]]
があり得ました。)
* [CODE(DOMi)@en[Location]] インターフェイス [CODE(DOMm)@en[reload]] メソッド
[13] [CODE(DOMi)@en[[[Location]]]] [[インターフェイス]]の
[DFN[[CODE(DOMm)@en[[[reload]]]]]] [[メソッド]]は、
次のようにしなければ[['''なりません''']]。
[FIG(steps)[
= [34] [VAR[キャッシュ上書き]]を、第1引数を [CODE(IDL)@en[[[boolean]]]] として解釈した結果に設定します。
= [25] [[閲覧文脈]]とは、[[文脈オブジェクト]]の[[文書]]の[[閲覧文脈]]を指します。
= [26] [[現在走っているタスク]]が[[利用者]]による[[閲覧文脈]]の [[resize]]
に起因する [CODE(DOMe)@en[[[resize]]]] の [[dispatch]] を行うものなら、
[[閲覧文脈]]の [[repaint]] を行い、ここで停止します [SRC[>>12]]。
= [27] それ以外で、[[閲覧文脈]]の[[活性文書]]が [[[CODE(HTMLe)@en[iframe]] [CODE(HTMLa)@en[srcdoc]]文書]]なら、
[[閲覧文脈]]の[[閲覧文脈包含子]]の[[[CODE(HTMLe)@en[iframe]]の属性を再処理]]します。 [SRC[>>12]]
= [28] それ以外で、[[閲覧文脈]]の[[活性文書]]が [[reload override flag]] を設定されているなら、
== [29] [[overridden reload]] を実行します。[[原始閲覧文脈]]は、[[閲覧文脈]]とします。 [SRC[>>12]] [VAR[キャッシュ上書き]]も引き渡します。
= [30] それ以外なら、
== [31] [[navigate]] を行います。
[FIG(list members short)[
:[[navigate]] する[[閲覧文脈]]:[[閲覧文脈]] [SRC[>>12]]
:新しい[[資源]]:[[文書の番地]] [SRC[>>12]]
:[[置換有効]]:[[真]] [SRC[>>12]]
:[[例外有効]]:[[真]] [SRC[>>12]]
:[[原始閲覧文脈]]:[[閲覧文脈]] [SRC[>>12]]
:[[reload-triggered navigation]]:[[真]] [SRC[>>12]]
:キャッシュ上書き:[VAR[キャッシュ上書き]]の[[真偽]]による
]FIG]
]FIG]
;; [22] [[利用者]]が[[再読込]]を指示した場合と違って、
[[冪等メソッド]]でなくても確認ダイアログは出ないようです。
[24] [[IE]] と [[Firefox]] は [[overridden reload]] に対応しているようですが、
[[Chrome]] は対応していないようです。 [TIME[2015-05-06T08:14:43.800Z]]
[35] [[HTML Standard]] はなぜか[[引数]]を規定していませんが、実際には省略可能な
[CODE(IDL)@en[[[boolean]]]] 型の[[引数]]が1つあるようです。
* 歴史
[1] [CITE@en-US[Window Object 1.0]]
( ([TIME[2006-04-08 02:19:28 +09:00]] 版))
<http://www.w3.org/TR/Window/#dfn-reload>
[2] [CITE@en[Web Applications 1.0 r5709 Make document.reload() reload the input to document.write(), not reload the URL of the page. Also, a number of editorial fixes.]]
( ([TIME[2010-12-08 07:10:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5708&to=5709>
[3] [CITE@en[Web Applications 1.0 r8400 Turns out location.reload() does work even when you have a fragment identifier...]]
( ([TIME[2014-01-17 02:51:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8399&to=8400>
[32] [CITE@en-US[Location.reload() - Web API Interfaces | MDN]]
([TIME[2015-04-20 10:22:31 +09:00]] 版)
<https://developer.mozilla.org/en-US/docs/Web/API/Location/reload>
[33] [CITE@ja[location.reloadはhref属性で使うと処理が完了するまで待ちになる at HouseTect, JavaScriptな情報をあなたに]]
([[HouseTect, JavaScriptな情報をあなたに]] 著, [TIME[2012-04-02 15:07:38 +09:00]] 版)
<http://hisasann.com/housetect/2008/03/locationreloadhref.html>