From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../serviceworkercontainer/controller/index.html | 57 ++++++++ .../web/api/serviceworkercontainer/index.html | 161 +++++++++++++++++++++ .../api/serviceworkercontainer/register/index.html | 132 +++++++++++++++++ 3 files changed, 350 insertions(+) create mode 100644 files/zh-cn/web/api/serviceworkercontainer/controller/index.html create mode 100644 files/zh-cn/web/api/serviceworkercontainer/index.html create mode 100644 files/zh-cn/web/api/serviceworkercontainer/register/index.html (limited to 'files/zh-cn/web/api/serviceworkercontainer') diff --git a/files/zh-cn/web/api/serviceworkercontainer/controller/index.html b/files/zh-cn/web/api/serviceworkercontainer/controller/index.html new file mode 100644 index 0000000000..349ba57586 --- /dev/null +++ b/files/zh-cn/web/api/serviceworkercontainer/controller/index.html @@ -0,0 +1,57 @@ +--- +title: ServiceWorkerContainer.controller +slug: Web/API/ServiceWorkerContainer/controller +translation_of: Web/API/ServiceWorkerContainer/controller +--- +
{{SeeCompatTable}}{{APIRef("Service Workers API")}}
+ +

当状态为activated 时, {{domxref("ServiceWorkerContainer")}} 接口的只读属性 controller 返回一个 {{domxref("ServiceWorker")}} 对象(与 {{domxref("ServiceWorkerRegistration.active")}} 返回的对象是同一个)。当页面强制刷新 (Shift + refresh) 或不存在active worder时,该属性返回 null 。

+ +

语法

+ +
var myController = navigator.serviceWorker.controller;
+
+ +

+ +

一个{{domxref("ServiceWorker")}}对象.

+ +

示例

+ +
if ('serviceWorker' in navigator) {
+  // Do a one-off check to see if a service worker's in control.
+  if (navigator.serviceWorker.controller) {
+    console.log('This page is currently controlled by:',
+      navigator.serviceWorker.controller);
+  } else {
+    console.log('This page is not currently controlled ' +
+      'by a service worker.');
+  }
+} else {
+  console.log('Service workers are not supported.');
+}
+ +

规范

+ + + + + + + + + + + + + + +
规范状态附注
{{SpecName('Service Workers', '#navigator-service-worker-controller', 'ServiceWorkerRegistration.controller')}}{{Spec2('Service Workers')}}Initial definition
+ +

浏览器兼容性

+ +
+ + +

{{Compat("api.ServiceWorkerContainer.controller")}}

+
diff --git a/files/zh-cn/web/api/serviceworkercontainer/index.html b/files/zh-cn/web/api/serviceworkercontainer/index.html new file mode 100644 index 0000000000..094ee798e2 --- /dev/null +++ b/files/zh-cn/web/api/serviceworkercontainer/index.html @@ -0,0 +1,161 @@ +--- +title: ServiceWorkerContainer +slug: Web/API/ServiceWorkerContainer +tags: + - API + - Draft + - Interface + - NeedsTranslation + - Offline + - Reference + - Service Workers + - ServiceWorkerContainer + - TopicStub + - Workers +translation_of: Web/API/ServiceWorkerContainer +--- +

{{SeeCompatTable}}{{APIRef("Service Workers API")}} 

+ +

ServiceWorkerContainer接口为 service worker提供一个容器般的功能,包括对service worker的注册,卸载 ,更新和访问service worker的状态,以及他们的注册者

+ +

主要是{{domxref("ServiceWorkerContainer.register", "ServiceWorkerContainer.register(scriptURL, scope[, base])")}}提供一个注册service worker的方法,{{domxref("ServiceWorkerContainer.controller")}}将获取当前控制页面网络的service worker

+ +

?属性

+ +
+
{{domxref("ServiceWorkerContainer.controller")}} {{readonlyinline}}
+
当?{{domxref("ServiceWorker")}}对象的state是active的时候,返回一个 {{domxref("ServiceWorker")}} ?对象 和{{domxref("ServiceWorkerRegistration.active")}})返回相同的对象。 如果当前的state都不是active或者强制刷新浏览器则返回null。
+
+ +
+
{{domxref("ServiceWorkerContainer.ready")}} {{readonlyinline}}
+
定义了一个serviceWorker是否准备好为一个页面服务,将返回一个 {{jsxref("Promise")}},并且这个 {{jsxref("Promise")}}永远不会 reject,这个 {{jsxref("Promise")}}会在{{domxref("ServiceWorkerRegistration")}} 获取到一个active的{{domxref("ServiceWorker")}}的时候被解决。
+
 
+
+ +

?事件

+ +
+
{{domxref("ServiceWorkerContainer.oncontrollerchange")}}
+
在{{domxref("ServiceWorkerRegistration")}}获取到一个新的active的{{domxref("ServiceWorker")}}对象的时候被触发
+
{{domxref("ServiceWorkerContainer.onerror")}}
+
当service workers中出现错误的时候被触发
+
{{domxref("ServiceWorkerContainer.onmessage")}}
+
当{{domxref("ServiceWorkerContainer")}}  对象接受到一个message消息的时候被触发,message由{{domxref("MessagePort.postMessage()")}}发出
+
+ +

?方法

+ +
+
{{domxref("ServiceWorkerContainer.register", "ServiceWorkerContainer.register()")}} 
+
创建或者更新一个{{domxref("ServiceWorkerRegistration")}} 用给定的scriptURL
+
{{domxref("ServiceWorkerContainer.getRegistration()")}}
+
根据当前网页的URL与当前service worker的scope Url的匹配,返回一个 {{domxref("ServiceWorkerRegistration")}}对象,如果不能返回一个 {{domxref("ServiceWorkerRegistration")}},则返回一个{{jsxref("Promise")}}。
+
{{domxref("ServiceWorkerContainer.getRegistrations()")}}
+
返回所有的{{domxref("ServiceWorkerRegistration")}}对象,如果不能返回一个 {{domxref("ServiceWorkerRegistration")}},则返回一个{{jsxref("Promise")}}。
+
+ +

?举例

+ +

?代码是service worker fallback-response sample (see fallback-response live)的其中一段. ?首先检查浏览器是否支持serviceWorker. 代码创建了一个serviceWorker,并且打印出来当前页面的serviceWorker的?是否接管了页面的网络状态. 如果没有需要刷新页面再次查看.  代码也处理了注册失败的情况

+ +
if ('serviceWorker' in navigator) {
+  navigator.serviceWorker.register('service-worker.js', {scope: './'}).then(function() {
+    if (navigator.serviceWorker.controller) {
+      document.querySelector('#status').textContent = 'The service worker is currently handling network operations.';
+      showRequestButtons();
+    } else {
+      document.querySelector('#status').textContent = 'Please reload this page to allow the service worker to handle network operations.';
+    }
+  }).catch(function(error) {
+    document.querySelector('#status').textContent = error;
+  });
+} else {
+  var aElement = document.createElement('a');
+  aElement.href = 'http://www.chromium.org/blink/serviceworker/service-worker-faq';
+  aElement.textContent = 'unavailable';
+  document.querySelector('#status').appendChild(aElement);
+}
+ +

Specifications

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('Service Workers', '#service-worker-container', 'ServiceWorkerContainer')}}{{Spec2('Service Workers')}}Initial definition.
+ +

Browser compatibility

+ +

{{CompatibilityTable}}

+ + + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support{{CompatChrome(40.0)}}{{ CompatGeckoDesktop("44.0") }}[1]{{CompatNo}}24{{CompatNo}}
+ + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)Firefox OSIE MobileOpera MobileSafari MobileChrome for Android
Basic support{{CompatUnknown}}{{ CompatGeckoMobile("44.0") }}{{ CompatVersionUnknown }}{{CompatNo}}{{CompatUnknown}}{{CompatNo}}{{CompatUnknown}}
+ +

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

+ +

See also

+ + + + diff --git a/files/zh-cn/web/api/serviceworkercontainer/register/index.html b/files/zh-cn/web/api/serviceworkercontainer/register/index.html new file mode 100644 index 0000000000..67b4d1a9ef --- /dev/null +++ b/files/zh-cn/web/api/serviceworkercontainer/register/index.html @@ -0,0 +1,132 @@ +--- +title: ServiceWorkerContainer.register() +slug: Web/API/ServiceWorkerContainer/register +tags: + - ServiceWorkerContainer.register() +translation_of: Web/API/ServiceWorkerContainer/register +--- +

{{SeeCompatTable}}{{APIRef("Service Workers API")}}

+ +

{{domxref("ServiceWorkerContainer")}} 接口的 register() 方法创建或更新一个给定scriptURL的ServiceWorkerRegistration 

+ +

如果成功,一个服务工作者注册将提供的脚本URL与一个范围进行关联,后者用于导航匹配。如果该方法无法返回一个 ServiceWorkerRegistration,则返回一个 Promise

+ +

您可以从受控页无条件调用此方法, 即, 您不需要首先检查是否有一个有效的注册。

+ +

语法

+ +
ServiceWorkerContainer.register(scriptURL, options)
+    .then(
+        function(ServiceWorkerRegistration) {
+            // do something
+        }
+);
+ +

参数

+ +
+
scriptURL
+
service worker脚本的URL.
+
options {{optional_inline}}
+
注册时提供选项的配置对象。 目前可用的选项包括: +
    +
  • scope: 一个 {{domxref("USVString")}},表示定义service worker注册范围的URL ;service worker可以控制的URL范围。通常是相对URL。默认值是基于当前的location,并以此来解析传入的路径.
  • +
+
+
+ +

返回

+ +

返回一个 {{domxref("Promise")}} 对象, 值是 {{domxref("ServiceWorkerRegistration")}} .

+ +

示例

+ +
if ('serviceWorker' in navigator) {
+  navigator.serviceWorker.register('service-worker.js', {scope: './'})
+  .then(function(registration) {
+    document.querySelector('#status').textContent = 'succeeded';
+  }).catch(function(error) {
+    document.querySelector('#status').textContent = error;
+  });
+} else {
+  // The current browser doesn't support service workers.
+  let aElement = document.createElement('a');
+  aElement.href = `
+     http://www.chromium.org/blink/serviceworker/service-worker-faq
+  `;
+  aElement.textContent = 'unavailable';
+  document.querySelector('#status').appendChild(aElement);
+}
+ +

规范

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('Service Workers', '#service-worker-container', 'ServiceWorkerContainer')}}{{Spec2('Service Workers')}}Initial definition.
+ +

浏览器兼容性

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support{{CompatChrome(40.0)}}{{ CompatGeckoDesktop("44.0") }}[1]{{CompatNo}}24{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidFirefox Mobile (Gecko)Firefox OSIE MobileOpera MobileSafari MobileChrome for Android
Basic support{{CompatUnknown}}{{ CompatGeckoMobile("44.0") }}{{ CompatVersionUnknown }}{{CompatNo}}{{CompatUnknown}}{{CompatNo}}{{CompatChrome(40.0)}}
+
+ +

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

-- cgit v1.2.3-54-g00ecf