再読込

location.reload() (DOM)

仕様書

再読み込み

[4] Webブラウザーは通常再読み込み機能を実装しています。これはおおむね location.reload に相当するものです。

[5] GUI 環境で動作する Webブラウザーは普通ツールバーなどに再読み込みボタンを設けています。

[6] Windows で動作する Webブラウザーの多くは F5Ctrl + R再読み込みが実行されます。

[8] Webサイトによっては、利用者F5 によって再読み込みを実行することを避けるために鍵盤イベント取り消しすることでこれを無効化していることがあります。 誤操作や安易な DoS攻撃を避けるために有用なこともありますが、 多くの場合は利用者の利便性を低下させるだけであり、好ましくない挙動と思われています。

[7] 多くの Webブラウザースーパーリロードも実装しています。

[40] 多くの Webブラウザー文字コード指定メニューも実装しています。

[14] 利用者閲覧文脈活性文書再読込 (reload) を求めたら、 次のようにするべきです >>12。 この時利用者キャッシュ上書きを指示できても構いません。

  1. [15] 閲覧文脈活性文書fetch の際の要求メソッド冪等メソッドでないなら、 利用者に確認します >>12
  2. [16] 利用者が拒んだら、ここで停止します >>12
  3. [20] エントリー更新のため navigate します >>12
    navigate する閲覧文脈
    閲覧文脈 >>12
    新しい資源
    閲覧文脈活性文書と同じ >>12
    置換有効
    >>12
    reload-triggered navigation
    >>12
    キャッシュ上書き
    キャッシュ上書き

[21] 再読込する資源やその要求メソッドは、閲覧文脈の当該セッション履歴エントリーの指定に拠ります。
[37] フレームの再読込に対応した Webブラウザーは、 iframe srcdoc文書の場合 (>>27) も考慮する必要がありそうです。
[38] navigate の際に reload-triggered navigation も設定する必要がありそうです。
[39] Webブラウザーにより、 navigate 内の fetchOrigin: が設定されるものとされないものがあるようです。 最近の Chrome は設定しないようです。

[57] 仕様書にはありませんが、キャッシュ上書きの場合、 navigate だけでなく、部分資源fetch でもキャッシュモードが適当に設定されるかもしれません。

[17] かつて仕様書Firefox は、 overridden reload を組み込んでいましたが、廃止されました。

安全性

[9] 再読み込みによって要求を再度実行しても安全かどうかは、 要求メソッドに依存します。 GET安全ですが、 POST安全ではありません。

[10] Webブラウザー非安全要求再読み込みする前に利用者モーダルダイアログによって再読み込みを本当に実行するか確認するのが普通です。

[23] 冪等なメソッドであっても、再読込までの間に自身または他者により他の操作が行われていた場合、 元とは異なる結果になるかもしれません。冪等なメソッドであっても安全なメソッドでなければ、 確認するべきかもしれません。ただし現在の Webnavigate 可能な要求メソッドの中では、冪等非安全なものはありませんから、 問題とはなりません。 (Web Forms 2.0 を実装していた Webブラウザーでは PUTDELETE への navigate があり得ました。)

[75] 最近、Chrome認証ダイアログ後の再読込でも、 安全でないときモーダルダイアログで確認するようになりました。

Location インターフェイス reload メソッド

[13] Location インターフェイスreload メソッドは、 次のようにしなければなりません

  1. [34] キャッシュ上書きを、第1引数を boolean として解釈した結果に設定します。
  2. [43] 文脈オブジェクト関係するDocument起源入口設定群オブジェクト起源同じ起源ドメインでなければ、
    1. [44] SecurityError 例外投げ、ここで停止します >>12
  3. [26] 現在走っているタスク利用者による閲覧文脈resize に起因する resizedispatch を行っているものなら、
    1. [45] 閲覧文脈repaint を行い、ここで停止します >>12
  4. [27] 閲覧文脈活性文書iframe srcdoc文書なら、
    1. [46] 閲覧文脈閲覧文脈包含子について iframeの属性を再処理します。 >>12
  5. [28] それ以外で、閲覧文脈活性文書reload override flag を設定されているなら、
    1. [29] overridden reload を実行します。原始閲覧文脈は、閲覧文脈とします。 >>12 キャッシュ上書きも引き渡します。 例外投げられたら、再度投げます >>12
  6. [30] それ以外なら、
    1. [31] エントリー更新のため navigate します >>12
      navigate する閲覧文脈
      閲覧文脈 >>12
      新しい資源
      閲覧文脈活性文書文書の番地 >>12
      置換有効
      >>12
      例外有効
      >>12
      原始閲覧文脈
      閲覧文脈 >>12
      reload-triggered navigation
      >>12
      キャッシュ上書き
      キャッシュ上書き
      エントリー更新するエントリー
      閲覧文脈セッション履歴現在エントリー
      例外投げられたら、再度投げます >>12

[25] 閲覧文脈とは、文脈オブジェクト文書閲覧文脈を指すと思われます。
[22] 利用者再読込を指示した場合と違って、 冪等メソッドでなくても確認ダイアログは出ず、常に GET となる >>12 ようです。

[24] IEFirefoxoverridden reload に対応しているようですが、 Chrome は対応していないようです。

[35] HTML Standard はなぜか引数を規定していませんが、実際には省略可能な boolean 型の引数が1つあるようです。

[47] reload メソッドは、 Unforgeable です >>12

[41] PluginArray インターフェイスrefresh メソッドは、本メソッド相当の動作をすることがあります。

再読込要求

[65] 要求は、 reload-navigation flag を持ちます。 初期値はです。 Fetch Standard

[63] Request インターフェイスisReloadNavigation IDL属性取得器は、次のようにします Fetch Standard

  1. [64] 文脈オブジェクトreload-navigation flagboolean で返します。

[61] navigate アルゴリズムは、引数として reload-triggered navigation を持ちます HTML Standard再読込の時に設定されます。

[77] navigate再読込のフラグが設定されますが、 それに付随して発生する fetch (CSS画像などの読み込み) には設定されません。 サービスワーカーキャッシュ再読込時に回避するような用途を考慮すると、 再読込だけでなく再読込から呼び出された fetch再読込に準じるものとみなす必要が出てきます。

[78] 再読込再読込からの fetch を識別する例

var isReloadClientId = {};
addEventListener ('fetch', ev => {
  var isReload = false;
  if (ev.request.isReloadNavigation || ev.isReload) {
    isReload = isReloadClientId[ev.resultingClientId] = true;
  } else if (isReloadClientId[ev.clientId]) {
    isReload = true;
  }
  ...
});

[79] ただしこの実装例では再読込後の fetch はすべて再読込と判断してしまいます。 最初の読み込みが終わった後の利用者の指示による fetch まで再読込として扱うべきかどうか検討の余地があります。 どの時点まで再読込として (最初の読み込みとして) 扱うべきかはアプリケーションごとに違いそうです。

[80] この例では navigation 全体が再読み込みかどうかチェックしましたが、 fetchcache: reload を指定した場合のように、 fetch 単位の再読み込みというのもあります。 そちらも拾いたい時は次のような条件を見ると良いでしょう。

      ev.request.cache === "no-store" ||
      ev.request.cache === "reload" ||
      ev.request.cache === "no-cache"

overridden reload

[36] overridden reload は、 document.open により生成されたページの再読込を行うものです。

document.open を参照。

歴史

[1] Window Object 1.0 ( ( 版)) http://www.w3.org/TR/Window/#dfn-reload

[2] 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. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5708&to=5709

[3] Web Applications 1.0 r8400 Turns out location.reload() does work even when you have a fragment identifier... ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8399&to=8400

[32] Location.reload() - Web API Interfaces | MDN ( 版) https://developer.mozilla.org/en-US/docs/Web/API/Location/reload

[33] location.reloadはhref属性で使うと処理が完了するまで待ちになる at HouseTect, JavaScriptな情報をあなたに (HouseTect, JavaScriptな情報をあなたに 著, 版) http://hisasann.com/housetect/2008/03/locationreloadhref.html

[42] 1069724 – Multiple HTTP2 Connections on shift-reload ( 版) https://bugzilla.mozilla.org/show_bug.cgi?id=1069724

[48] Merge effective script origin into origin · whatwg/html@8a843f2 ( 版) https://github.com/whatwg/html/commit/8a843f2169a6864a3024c4329528dccb2051d275

[49] Editorial: turn "exceptions enabled" into a flag ( (annevk著, )) https://github.com/whatwg/html/commit/879edbfcb25586caec8df93f303a434a700a18bc

[50] 1267474 – Cache-Control: immutable ( ()) https://bugzilla.mozilla.org/show_bug.cgi?id=1267474

[51] Issue 505048 - chromium - Chrome makes more conditional re-validation requests than other browsers - Monorail ( ()) https://bugs.chromium.org/p/chromium/issues/detail?id=505048

[52] Issue 600636 - chromium - Change behavior of Reload to (validate main resource + regular load) instead of the current forced reload which triggers conditional requests on all the things - Monorail ( ()) https://bugs.chromium.org/p/chromium/issues/detail?id=600636

[53] Reload, reloaded - Google ドキュメント ( ()) https://docs.google.com/document/d/1vwx8WiUASKyC2I-j2smNhaJaQQhcWREh7PC3HiIAQCo/edit?pref=2&pli=1

[54] Issue 578941 - chromium - document.location.reload([false]) always reloads from Server instead of Cache - Monorail ( ()) https://bugs.chromium.org/p/chromium/issues/detail?id=578941

[55] Issue 42528 - chromium - Chrome/Chromium caches negative DNS responses and ignores changes to /etc/resolv.conf - Monorail ( ()) https://bugs.chromium.org/p/chromium/issues/detail?id=42528

You should be able to workaround your problem by hitting refresh, which should bypass that cache. (There are

some exceptions, let me know if you are hitting them).

[56] Issue 44386 - chromium - The "Reload" link on the network error page does not actually do a reload - Monorail ( ()) https://bugs.chromium.org/p/chromium/issues/detail?id=44386

[58] Fix reloads to not wipe out future session history (domenic著, ) https://github.com/whatwg/html/commit/6c777d89fa177cbae2a0671ca9d681d7c81688e3

[59] For users on very slow connections, block document.written scripts · Issue #17 · WICG/interventions () https://github.com/WICG/interventions/issues/17

[60] 747812 - Re-submitted POST request (page reload) does not contain Content-Type - chromium - Monorail ( ()) https://bugs.chromium.org/p/chromium/issues/detail?id=747812

[62] Set request's reload-navigation flag for reloads (yutakahirano著, ) https://github.com/whatwg/html/commit/3072f1d71fc66c792412e1f5785f047f637545b9

[66] Introduce reload-navigation flag by yutakahirano · Pull Request #685 · whatwg/fetch () https://github.com/whatwg/fetch/pull/685

[67] Set request's reload-navigation flag when the navigation is reload-trigerred by yutakahirano · Pull Request #3592 · whatwg/html () https://github.com/whatwg/html/pull/3592

[68] Proposal: FetchEvent.navigationLoadType · Issue #1167 · w3c/ServiceWorker () https://github.com/w3c/ServiceWorker/issues/1167

[69] FetchEvent.prototype.isReload is no longer part of the specification by cdumez · Pull Request #8669 · w3c/web-platform-tests () https://github.com/w3c/web-platform-tests/pull/8669

[70] Editorial: move definition of "reload-navigation flag" (yutakahirano著, ) https://github.com/whatwg/fetch/commit/efe088f656a79af08d98d904e4c5550dc3edc403

[71] Move definition of reload-navigation flag · Issue #732 · whatwg/fetch () https://github.com/whatwg/fetch/issues/732

[72] Move definition of "reload-navigation flag" by yutakahirano · Pull Request #739 · whatwg/fetch () https://github.com/whatwg/fetch/pull/739

[73] document.open() can make a document's URL go out of sync with its history entry · Issue #3885 · whatwg/html () https://github.com/whatwg/html/issues/3885

[74] Remove overridden reload concept (TimothyGu著, ) https://github.com/whatwg/html/commit/6440ccae7340ea41d3eb5bf8ff0b3b27363eda85

[18] 556002 - document.open() and write() after parsing is complete breaks reload button - we reload new, not original document () https://bugzilla.mozilla.org/show_bug.cgi?id=556002

[19] document.open() simplifications, part 2 by TimothyGu · Pull Request #3946 · whatwg/html () https://github.com/whatwg/html/pull/3946

[81] Editorial: nested browsing context is a member, not a type (annevk, , ) https://github.com/whatwg/html/commit/6b737bbc428facf34ec3728c0912cf9e172d0ea4