FetchEvent: request 属性

Baseline 已广泛支持

此功能已成熟,可跨多种设备和浏览器版本工作。它自 ⁨2018 年 4 月⁩ 起已在所有浏览器中可用。

注意:此功能仅在 Service Workers 中可用。

requestFetchEvent 接口的一个只读属性,它返回触发事件处理程序的 Request 对象。

此属性不可为空(自 Firefox 46 版本起)。如果请求不是通过其他方式提供的,则构造函数 options 对象必须包含一个请求(请参阅 FetchEvent())。

一个 Request 对象。

示例

此代码片段摘自 Service Worker 预取示例在线运行预取示例)。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;
        });
    }),
  );
});

规范

规范
Service Workers
# fetch-event-request

浏览器兼容性

另见