这篇翻译不完整。请帮忙从英语翻译这篇文章

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

FetchEvent 接口的 respondWith() 方法旨在包裹代码,这些代码为来自受控页面的request生成自定义的response。这些代码通过返回一个 Response 、 network error 或者 Fetch的方式resolve。

有关跨域内容污染的渲染端安全检测与 Response 体的透明度(或者不透明度)相关联,而不是URL。如果request是一个顶级的导航,而返回值是一个类型属性不透明的 Response(即不透明响应体),一个 network error 将被返回给 Fetch。所有成功(非网络错误)响应的最终URL是请求的URL。

语法

FetchEvent.respondWith(
  //Promise that resolves to a Response or a network error.
​)

返回值

Void.

参数

任何自定义的响应生成代码。

示例

该代码片段来自 service worker fetch sample (run the fetch sample live)。 ServiceWorkerGlobalScope.onfetch 事件处理程序侦听 fetch 事件。当触发时,FetchEvent.respondWith(any value) 返回一个promise给受控页面。该promise在 Cache 对象中查询第一个匹配URL请求。如果没有发现匹配项,该代码将转而从网络获取响应。

该代码也处理从 ServiceWorkerGlobalScope.fetch 操作中抛出的异常。请注意,HTTP错误响应(例如404)不会触发异常。 它将返回具有相应错误代码集的正常响应对象。

self.addEventListener('fetch', function(event) {
  console.log('Handling fetch event for', event.request.url);

  event.respondWith(
    caches.match(event.request).then(function(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(function(response) {
        console.log('Response from network is:', response);

        return response;
      }).catch(function(error) {
        console.error('Fetching failed:', error);

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

规范

Specification Status Comment
Service Workers
respondWith()
Working Draft Initial definition.

浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 40.0 44.0 (44.0)[1] 未实现 24 未实现
Feature Android Android Webview Firefox Mobile (Gecko) Firefox OS IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support 未实现 ? 44.0 (44.0) (Yes) 未实现 ? 未实现 44.0

[1] Service workers (and Push) have been disabled in the Firefox 45 and 52 Extended Support Releases (ESR.)

请参见

文档标签和贡献者

此页面的贡献者: flyingsouthwind
最后编辑者: flyingsouthwind,