From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- files/ru/web/api/clients/claim/index.html | 114 ++++++++++++++++++++++ files/ru/web/api/clients/index.html | 128 +++++++++++++++++++++++++ files/ru/web/api/clients/openwindow/index.html | 91 ++++++++++++++++++ 3 files changed, 333 insertions(+) create mode 100644 files/ru/web/api/clients/claim/index.html create mode 100644 files/ru/web/api/clients/index.html create mode 100644 files/ru/web/api/clients/openwindow/index.html (limited to 'files/ru/web/api/clients') diff --git a/files/ru/web/api/clients/claim/index.html b/files/ru/web/api/clients/claim/index.html new file mode 100644 index 0000000000..046a4f8a0d --- /dev/null +++ b/files/ru/web/api/clients/claim/index.html @@ -0,0 +1,114 @@ +--- +title: Clients.claim() +slug: Web/API/Clients/claim +translation_of: Web/API/Clients/claim +--- +

{{APIRef("Service Worker Clients")}}

+ +

Метод claim() интерфейса {{domxref("Clients")}} позволяет активному сервис-воркеру установить себя {{domxref("ServiceWorkerContainer.controller", "контролирующим воркером")}} для всех клиентских страниц в своей {{domxref("ServiceWorkerRegistration.scope", "области видимости")}}. Вызывает событие "controllerchange" на {{domxref("ServiceWorkerContainer","navigator.serviceWorker")}} всех клиентских страниц, контролируемых сервис-воркером.

+ +

После регистрации сервис-воркера страницы не начнут использовать его, пока не загрузятся вновь. Метод claim() позволяет установить контроль над страницами немедленно. Имейте в виду, что в этом случае ваш сервис-воркер будет контролировать все загружаемые по сети страницы этого origin, в т. ч. из других сервис-воркеров.

+ +

Синтаксис

+ +
await clients.claim();
+
+ +

Параметры

+ +

Нет.

+ +

Результат

+ +

Promise с undefined.

+ +

Пример

+ +

В примере ниже внутри обработчика события "activate" сервис-воркера используется метод claim(), что позволяет клиентской странице, загруженной в той же области видимости, обходиться без перезагрузки для использования сервис-воркером.

+ +
self.addEventListener('activate', event => {
+  event.waitUntil(clients.claim());
+});
+ +

Спецификации

+ + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('Service Workers', '#clients', 'Clients')}}{{Spec2('Service Workers')}}Initial definition. It is still under development (see issue 414 and issue 423).
+ +

Поддержка браузерами

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support{{CompatChrome(42.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 & 52 Extended Support Releases (ESR.)

+ +

Смотри также

+ + diff --git a/files/ru/web/api/clients/index.html b/files/ru/web/api/clients/index.html new file mode 100644 index 0000000000..5372df8139 --- /dev/null +++ b/files/ru/web/api/clients/index.html @@ -0,0 +1,128 @@ +--- +title: Clients +slug: Web/API/Clients +tags: + - API + - Clients + - Experimental + - Expérimental(2) + - Interface + - NeedsTranslation + - Reference + - Référence(2) + - Service Workers + - ServiceWorker + - TopicStub + - Workers +translation_of: Web/API/Clients +--- +

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

+ +

Интерфейс Clients Service Workers API представляет собой контейнер со списком объектов {{domxref("Client")}}.

+ +

Методы

+ +
+
{{domxref("Clients.get()")}}
+
Получает клиента сервис воркера, соответствующего данному id, и возвращает его в {{jsxref("Promise")}}.
+
{{domxref("Clients.matchAll()")}}
+
Получает список клиентов сервис воркера и возвращает их в {{jsxref("Promise")}}. Включает параметр options для возврата всех клиентов сервис воркера, чьи источники являются теми же источниками, что и у связанного источника сервис воркера. Если options не включены, метод возвращает только тех клиентов сервис воркера, которых тот контролирует. 
+
{{domxref("Clients.openWindow()")}}
+
Открывает {{domxref("Client")}} сервис воркера в новом окне браузера.
+
{{domxref("Clients.claim()")}}
+
Позволяет активному Сервис Воркеру установить себя, как активного воркера для клиентской страницы, когда воркер и страница находятся в одной области. 
+
+ +

Примеры

+ +
clients.matchAll(options).then(function(clients) {
+  for (i = 0 ; i < clients.length ; i++) {
+    if (clients[i] === 'index.html') {
+      clients.openWindow(clients[i]);
+      // или сделать что-то другое, с учетом подошедшего клиента
+    }
+  }
+});
+ +

Спецификации

+ + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('Service Workers', '#clients', 'Clients')}}{{Spec2('Service Workers')}}Initial definition
+ +

Совместимость с браузерами

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + +
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support{{CompatChrome(40.0)}}{{ CompatGeckoDesktop("44.0") }}[1]{{CompatNo}}{{CompatUnknown}}{{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 (и Push) были отключены в Firefox 45 & 52 Extended Support Releases (ESR.)

+ +

Смотри так же

+ + diff --git a/files/ru/web/api/clients/openwindow/index.html b/files/ru/web/api/clients/openwindow/index.html new file mode 100644 index 0000000000..64d67ce7ca --- /dev/null +++ b/files/ru/web/api/clients/openwindow/index.html @@ -0,0 +1,91 @@ +--- +title: Clients.openWindow() +slug: Web/API/Clients/openWindow +tags: + - API + - Clients + - Experimental + - Method + - Reference + - Service Workers + - ServiceWorker + - openWindow +translation_of: Web/API/Clients/openWindow +--- +
{{APIRef("Service Workers API")}}
+ +

Метод openWindow() интерфейса {{domxref("Clients")}} создает новый контекст просмотра верхнего уровня и загружает заданный URL. Если вызывающий скрипт не имеет разрешения на отображение всплывающих окон, openWindow() выдаст InvalidAccessError.

+ +

В Firefox этому методу разрешено отображать всплывающие окна только при вызове события клике по уведомлению.

+ +

В Chrome для Android этот метод может открыть URL-адрес в существующем контексте просмотра, предоставляемым автономным веб-приложением (standalone web app), ранее добавленным на главный экран пользователя. С недавнего времени это также работает в Chrome для Windows.

+ +

Синтаксис

+ +
self.clients.openWindow(url).then(function(windowClient) {
+  // Do something with your WindowClient
+});
+ +

Параметры

+ +
+
url
+
{{domxref("USVString")}} - URL-адрес клиента, который вы хотите открыть. Обычно это значение должно быть URL из того же источника, что и вызывающий скрипт.
+
+ +

Возвращаемое значение

+ +
+
{{jsxref("Promise")}}, который преобразуется в объект {{domxref("WindowClient")}}, если URL-адрес исходит из того же источника, что и сервис-воркер, иначе {{Glossary("null", "null value")}} .
+
+ +

Примеры

+ +
// Отправить уведомление в OS, если возможно
+if (self.Notification.permission === 'granted') {
+  const notificationObject = {
+    body: 'Click here to view your messages.',
+    data: { url: self.location.origin + '/some/path' },
+    // data: { url: 'http://example.com' },
+  };
+  self.registration.showNotification('You\'ve got messages!', notificationObject);
+}
+
+// Слушатель события клика по уведомлению
+self.addEventListener('notificationclick', e => {
+  // Закрываем всплывающее окно с уведомлением
+  e.notification.close();
+  // Получите все клиенты Windows
+  e.waitUntil(clients.matchAll({ type: 'window' }).then(clientsArr => {
+    // Если вкладка, соответствующая целевому URL-адресу, уже существует, сфокусируйтесь на ней;
+    const hadWindowToFocus = clientsArr.some(windowClient => windowClient.url === e.notification.data.url ? (windowClient.focus(), true) : false);
+    // В противном случае откройте новую вкладку для соответствующего URL-адреса и сфокусируйте ее.
+    if (!hadWindowToFocus) clients.openWindow(e.notification.data.url).then(windowClient => windowClient ? windowClient.focus() : null);
+  }));
+});
+
+ +

Спецификации

+ + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('Service Workers', '#clients-openwindow', 'Clients: openWindow')}}{{Spec2('Service Workers')}}Initial definition.
+ +

Совместимость с браузером

+ +
+ + +

{{Compat("api.Clients.openWindow")}}

+
-- cgit v1.2.3-54-g00ecf