FetchEvent.request

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.

FetchEvent 接口的只读属性 request 返回触发事件处理程序的 Request

这个属性是非空的(自从 Firefox 46 版本开始)。如果一个请求不是由其他方式提供的,构造函数的 options 对象必须包含一个请求(request)(参见 FetchEvent())。

一个 Request 对象。

示例

来自 service worker fetch 示例的代码片段(fetch 示例的在线演示)。onfetch 事件处理程序监听 fetch 事件。当被触发时,将最终会传递给受控页面的 promise 传递给 FetchEvent.respondWith()。该 promise 会用 Cache 中第一个匹配的 URL 请求来兑现。如果没有匹配,代码将从网络获取响应。

该代码还会处理 fetch() 操作抛出的异常。注意,HTTP 错误响应(例如 404)不会抛出异常。它将返回一个拥有适当错误代码集的正常的响应对象。

js
self.addEventListener("fetch", (event) => {
  console.log("Handling fetch event for", event.request.url);

  event.respondWith(
    caches.match(event.request).then((response) => {
      if (response) {
        console.log("Found response in cache:", response);

        return response;
      }
      console.log("No response found in cache. About to fetch from network…");

      return fetch(event.request)
        .then((response) => {
          console.log("Response from network is:", response);

          return response;
        })
        .catch((error) => {
          console.error("Fetching failed:", error);

          throw error;
        });
    }),
  );
});

规范

Specification
Service Workers
# fetch-event-request

浏览器兼容性

BCD tables only load in the browser

参见