FetchEvent - Web APIs 编辑
This is the event type for fetch
events dispatched on the service worker global scope. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the event.respondWith()
method, which allows us to provide a response to this fetch.
Constructor
FetchEvent()
- Creates a new
FetchEvent
object. This constructor is not typically used. The browser creates these objects itself and provides them tofetch
event callbacks.
Properties
Inherits properties from its ancestor, Event
.
FetchEvent.clientId
Read only- The
id
of the same-originclient
that initiated the fetch. FetchEvent.preloadResponse
Read only- A
Promise
for aResponse
, orundefined
if this fetch is not a navigation, or navigation preload is not enabled. FetchEvent.replacesClientId
Read only- The
id
of theclient
that is being replaced during a page navigation. FetchEvent.resultingClientId
Read only- The
id
of theclient
that replaces the previous client during a page navigation. FetchEvent.request
Read only- The
Request
the browser intends to make.
Methods
Inherits methods from its parent, ExtendableEvent
.
FetchEvent.respondWith()
- Prevent the browser's default fetch handling, and provide (a promise for) a response yourself.
ExtendableEvent.waitUntil()
Extends the lifetime of the event. Used to notify the browser of tasks that extend beyond the returning of a response, such as streaming and caching.
Examples
This fetch event uses the browser default for non-GET requests. For GET requests it tries to return a match in the cache, and falls back to the network. If it finds a match in the cache, it asynchronously updates the cache for next time.
self.addEventListener('fetch', event => {
// Let the browser do its default thing
// for non-GET requests.
if (event.request.method != 'GET') return;
// Prevent the default, and handle the request ourselves.
event.respondWith(async function() {
// Try to get the response from a cache.
const cache = await caches.open('dynamic-v1');
const cachedResponse = await cache.match(event.request);
if (cachedResponse) {
// If we found a match in the cache, return it, but also
// update the entry in the cache in the background.
event.waitUntil(cache.add(event.request));
return cachedResponse;
}
// If we didn't find a match in the cache, use the network.
return fetch(event.request);
}());
});
Specifications
Specification | Status | Comment |
---|---|---|
Service Workers The definition of 'FetchEvent()' in that specification. | Working Draft | Initial definition. |
Browser compatibility
BCD tables only load in the browser
See also
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论