ServiceWorker - Web API 接口参考 编辑
这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
一个ServiceWorker对象在 ServiceWorkerRegistration.active
属性和 ServiceWorkerContainer.controller
属性中可用 — 这是一个激活并在控制页面的service worker(service worker成功注册,被控页面已经重新加载完毕.)
ServiceWorker接口被分配了一系列生命周期事件 --- 安装和激活 --- 以及功能型的事件,包括 fetch.一个ServiceWorker对象有一个与之关联的 ServiceWorker.state
,指示着它的生命周期.
属性
ServiceWorker 接口继承它父类Worker
的属性.
ServiceWorker.scriptURL
只读- 返回作为
ServiceWorkerRegistration
一部分所定义的ServiceWorker序列化脚本URL.这个URL必须和注册该ServiceWorker的文档处于同一域. ServiceWorker.state
只读- 返回service worker的状态.其值可能是如下之一:installing,installed,activating,activated或者是redundant.
Event handlers
ServiceWorker.onstatechange
只读- 一个一旦
ServiceWorker.state
发生改变时,即一个类型为statechange事件触发时就会被调用的EventListener
属性.
方法
- ServiceWorker 接口继承它父类
Worker
的方法 ,并带有一个Worker.terminate
的异常 --- 它不应该从service workers.ServiceWorker中访问.
例子
代码段来自service worker registration-events sample (live demo). 这段代码监听了ServiceWorker.state
的变化并且返回它的值.
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('service-worker.js', {
scope: './'
}).then(function (registration) {
var serviceWorker;
if (registration.installing) {
serviceWorker = registration.installing;
document.querySelector('#kind').textContent = 'installing';
} else if (registration.waiting) {
serviceWorker = registration.waiting;
document.querySelector('#kind').textContent = 'waiting';
} else if (registration.active) {
serviceWorker = registration.active;
document.querySelector('#kind').textContent = 'active';
}
if (serviceWorker) {
// logState(serviceWorker.state);
serviceWorker.addEventListener('statechange', function (e) {
// logState(e.target.state);
});
}
}).catch (function (error) {
// Something went wrong during registration. The service-worker.js file
// might be unavailable or contain a syntax error.
});
} else {
// The current browser doesn't support service workers.
}
规范
Specification | Status | Comment |
---|---|---|
Service Workers ServiceWorker | 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) | 未实现 | ? | 未实现 | 40.0 |
[1] Service workers (and Push) have been disabled in the Firefox 45 Extended Support Release (ESR.)
参见
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论