--- title: Cache.put() slug: Web/API/Cache/put tags: - API - Cache - Method - Reference - Service Workers - Service worker API - ServiceWorker - put translation_of: Web/API/Cache/put ---
{{APIRef("Service Workers API")}}
{{domxref("Cache")}} インターフェイスの put()
メソッドを使用すると、キーと値のペアを現在の {{domxref("Cache")}} オブジェクトに追加できます。
多くの場合、1つ以上のリクエストを {{domxref("WindowOrWorkerGlobalScope.fetch","fetch()")}} して、その結果を直接キャッシュに追加したいだけです。 そのような場合、{{domxref("Cache.add","Cache.add()")}} や {{domxref("Cache.addAll","Cache.addAll()")}} を使用する方がよいでしょう。 これらは、1つ以上のそれらの操作の一括指定関数であるためです。
fetch(url).then(function(response) { if (!response.ok) { throw new TypeError('Bad response status'); } return cache.put(url, response); })
注: put()
は、リクエストに一致する、以前にキャッシュに保存されたキーと値のペアを上書きします。
注: {{domxref("Cache.add")}} や {{domxref("Cache.addAll")}} は、200 の範囲にない Response.status
値を持つレスポンスをキャッシュしませんが、{{domxref("Cache.put")}} では、リクエストとレスポンスのペアを格納できます。 その結果、{{domxref("Cache.put")}} では可能ですが、{{domxref("Cache.add")}} や {{domxref("Cache.addAll")}} は不透明なレスポンスを格納するために使用できません。
cache.put(request, response).then(function() { // リクエストとレスポンスのペアがキャッシュに追加されました });
undefined
で解決する {{jsxref("Promise")}}。
注: URL スキームが http
または https
でない場合、Promise は TypeError
で拒否します。
この例は、MDN の sw-test の例からのものです(sw-test をライブで見る)。 ここでは、{{domxref("FetchEvent")}} が発生するのを待ちます。 次のようなカスタムレスポンスを作成します。
open()
を使用して v1
キャッシュを開き、{{domxref("Cache.put","Cache.put()")}} を使用してデフォルトのネットワークリクエストをキャッシュに入れ、 return response.clone()
を使用してデフォルトのネットワークリクエストのクローンを返します。 put()
がレスポンスのボディを消費するため、クローンが必要です。var response; var cachedResponse = caches.match(event.request).catch(function() { return fetch(event.request); }).then(function(r) { response = r; caches.open('v1').then(function(cache) { cache.put(event.request, response); }); return response.clone(); }).catch(function() { return caches.match('/sw-test/gallery/myLittleVader.jpg'); });
仕様 | 状態 | コメント |
---|---|---|
{{SpecName('Service Workers', '#dom-cache-put', 'Cache: put')}} | {{Spec2('Service Workers')}} | 初期定義 |
{{Compat("api.Cache.put")}}