ExtendableEvent interface extends the lifetime of the 安装 and activate events dispatched on the global scope as part of the service worker lifecycle. This ensures that any functional events (like FetchEvent ) are not dispatched until it upgrades database schemas and deletes the outdated cache entries.

waitUntil() is called outside of the ExtendableEvent handler, the browser should throw an InvalidStateError ; note also that multiple calls will stack up, and the resulting promises will be added to the list of extend lifetime promises .

注意 : The behaviour described in the above paragraph was fixed in Firefox 43 (see bug 1180274 )。

This interface inherits from the 事件 接口。

  <div id="interfaceDiagram" style="display: inline-block; position: relative; width: 100%; padding-bottom: 8.571428571428571%; vertical-align: middle; overflow: hidden;"><svg style="display: inline-block; position: absolute; top: 0; left: 0;" viewbox="-20 0 700 60" preserveAspectRatio="xMinYMin meet"><a xlink:href="../API/Event" target="_top"><rect x="1" y="1" width="75" height="50" fill="#fff" stroke="#D4DDE4" stroke-width="2px" /><text  x="38.5" y="30" font-size="12px" font-family="Consolas,Monaco,Andale Mono,monospace" fill="#4D4E53" text-anchor="middle" alignment-baseline="middle">Event</text></a><polyline points="76,25  86,20  86,30  76,25" stroke="#D4DDE4" fill="none"/><line x1="86" y1="25" x2="116" y2="25" stroke="#D4DDE4"/><a xlink:href="../API/ExtendableEvent" target="_top"><rect x="116" y="1" width="150" height="50" fill="#F4F7F8" stroke="#D4DDE4" stroke-width="2px" /><text  x="191" y="30" font-size="12px" font-family="Consolas,Monaco,Andale Mono,monospace" fill="#4D4E53" text-anchor="middle" alignment-baseline="middle">ExtendableEvent</text></a></svg></div>
					
  a:hover text { fill: #0095DD; pointer-events: all;}
					

注意 : This interface is only available when the global scope is a ServiceWorkerGlobalScope . It is not available when it is a Window , or the scope of another kind of worker.

构造函数

ExtendableEvent()
创建新的 ExtendableEvent 对象。

特性

Doesn't implement any specific properties, but inherits properties from its parent, 事件 .

方法

继承方法来自其父级 事件 .

ExtendableEvent.waitUntil()

Extends the lifetime of the event.  It is intended to be called in the 安装 EventHandler installing worker and on the activate EventHandler active worker.

范例

This code snippet is from the service worker prefetch sample (见 prefetch example live .) The code calls ExtendableEvent.waitUntil() in ServiceWorkerGlobalScope.oninstall , delaying treating the ServiceWorkerRegistration.installing worker as installed until the passed promise resolves successfully. The promise resolves when all resources have been fetched and cached, or else when any exception occurs.

The code snippet also shows a best practice for versioning caches used by the service worker. Though there's only one cache in this example, the same approach can be used for multiple caches. It maps a shorthand identifier for a cache to a specific, versioned cache name.

注意 : In Chrome, logging statements are visible via the "Inspect" interface for the relevant service worker accessed via chrome://serviceworker-internals.

var CACHE_VERSION = 1;
var CURRENT_CACHES = {
  prefetch: 'prefetch-cache-v' + CACHE_VERSION
};
self.addEventListener('install', function(event) {
  var urlsToPrefetch = [
    './static/pre_fetched.txt',
    './static/pre_fetched.html',
    'https://www.chromium.org/_/rsrc/1302286216006/config/customLogo.gif'
  ];
  console.log('Handling install event. Resources to pre-fetch:', urlsToPrefetch);
  event.waitUntil(
    caches.open(CURRENT_CACHES['prefetch']).then(function(cache) {
      return cache.addAll(urlsToPrefetch.map(function(urlToPrefetch) {
        return new Request(urlToPrefetch, {mode: 'no-cors'});
      })).then(function() {
        console.log('All resources have been fetched and cached.');
      });
    }).catch(function(error) {
      console.error('Pre-fetching failed:', error);
    })
  );
});
					
重要 : When fetching resources, it's very important to use {mode: 'no-cors'} if there is any chance that the resources are served off of a server that doesn't support CORS . In this example, www.chromium.org doesn't support CORS.

规范

规范 状态 注释
服务工作者
The definition of 'ExtendableEvent' in that specification.
工作草案 初始定义。

浏览器兼容性

The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request. 更新 GitHub 上的兼容性数据
桌面 移动
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet
ExtendableEvent Chrome 40 Edge 17 Firefox 44 注意事项
44 注意事项
Extended Support Releases (ESR) before Firefox 78 ESR do not support service workers and the Push API.
IE 不支持 No Opera 24 Safari 不支持 No WebView Android 40 Chrome Android 40 Firefox Android 44 Opera Android 24 Safari iOS 不支持 No Samsung Internet Android 4.0
ExtendableEvent() 构造函数 Chrome 40 Edge 17 Firefox 44 注意事项
44 注意事项
Extended Support Releases (ESR) before Firefox 78 ESR do not support service workers and the Push API.
IE 不支持 No Opera 24 Safari 不支持 No WebView Android 40 Chrome Android 40 Firefox Android 44 Opera Android 24 Safari iOS 不支持 No Samsung Internet Android 4.0
waitUntil Chrome 40 Edge 17 Firefox 44 IE 不支持 No Opera 24 Safari 不支持 No WebView Android 40 Chrome Android 40 Firefox Android 44 Opera Android 24 Safari iOS 不支持 No Samsung Internet Android 4.0

图例

完整支持

完整支持

不支持

不支持

实验。期望将来行为有所改变。

实验。期望将来行为有所改变。

见实现注意事项。

另请参阅

元数据

  • 最后修改: