Clients.openWindow()

Этот перевод не завершён. Пожалуйста, помогите перевести эту статью с английского

Метод openWindow() интерфейса 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
USVString - URL-адрес клиента, который вы хотите открыть. Обычно это значение должно быть URL из того же источника, что и вызывающий скрипт.

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

Promise, который преобразуется в объект WindowClient, если URL-адрес исходит из того же источника, что и сервис-воркер, иначе 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);
  }));
});

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

Specification Status Comment
Service Workers
Определение 'Clients: openWindow' в этой спецификации.
Рабочий черновик Initial definition.

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

Update compatibility data on GitHub
КомпьютерыМобильные
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidFirefox для AndroidOpera для AndroidSafari on iOSSamsung Internet
openWindow
Экспериментальная
Chrome Полная поддержка 40
Полная поддержка 40
Полная поддержка 42
Замечания
Замечания Can only open URLs on the same origin.
Полная поддержка 43
Замечания
Замечания Can open any URL.
Полная поддержка 51
Замечания
Замечания URLs may open inside an existing browsing context provided by a standalone web app
Edge Полная поддержка ≤79
Полная поддержка ≤79
Полная поддержка ≤79
Замечания
Замечания Can only open URLs on the same origin.
Полная поддержка ≤79
Замечания
Замечания Can open any URL.
Полная поддержка ≤79
Замечания
Замечания URLs may open inside an existing browsing context provided by a standalone web app
Firefox Полная поддержка 45
Замечания
Полная поддержка 45
Замечания
Замечания Extended Support Releases (ESR) before Firefox 78 ESR do not support service workers and the Push API.
IE Нет поддержки НетOpera Полная поддержка 38Safari Нет поддержки НетWebView Android Полная поддержка 40
Полная поддержка 40
Полная поддержка 42
Замечания
Замечания Can only open URLs on the same origin.
Полная поддержка 43
Замечания
Замечания Can open any URL.
Полная поддержка 51
Замечания
Замечания URLs may open inside an existing browsing context provided by a standalone web app
Chrome Android Полная поддержка 40
Полная поддержка 40
Полная поддержка 42
Замечания
Замечания Can only open URLs on the same origin.
Полная поддержка 43
Замечания
Замечания Can open any URL.
Полная поддержка 51
Замечания
Замечания URLs may open inside an existing browsing context provided by a standalone web app
Firefox Android Полная поддержка 45Opera Android Полная поддержка 41Safari iOS Нет поддержки НетSamsung Internet Android Полная поддержка 4.0
Полная поддержка 4.0
Полная поддержка 5.0
Замечания
Замечания URLs may open inside an existing browsing context provided by a standalone web app

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки
Экспериментальная. Ожидаемое поведение может измениться в будущем.
Экспериментальная. Ожидаемое поведение может измениться в будущем.
Смотрите замечания реализации.
Смотрите замечания реализации.