Spec-Zone.ru › Web APIs

Клиенты: метод openWindow()

Базовая Широко доступная

Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2018 года.

  • Узнать больше
  • Показать полную совместимость
  • Отправить отзыв

Примечание: Эта функция доступна только в Сервис-воркерах.

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

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

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

Синтаксис

openWindow(url)

Параметры

url

Строка, представляющая URL клиента, который вы хотите открыть в окне. Как правило, это значение должно быть URL с той же областью, что и вызывающий скрипт.

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

Объект Promise, который возвращает объект WindowClient, если URL находится в той же области, что и сервис-воркер, или null в противном случае.

Исключения

InvalidAccessError DOMException

Обещание отклоняется с этим исключением, если ни одно из окон в области приложения не имеет временной активации.

Требования к безопасности

  • По крайней мере одно окно в области приложения должно иметь временную активацию.

Примеры

// Send notification to OS if applicable
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,
  );
}

// Notification click event listener
self.addEventListener("notificationclick", (e) => {
  // Close the notification popout
  e.notification.close();
  // Get all the Window clients
  e.waitUntil(
    clients.matchAll({ type: "window" }).then((clientsArr) => {
      // If a Window tab matching the targeted URL already exists, focus that;
      const hadWindowToFocus = clientsArr.some((windowClient) =>
        windowClient.url === e.notification.data.url
          ? (windowClient.focus(), true)
          : false,
      );
      // Otherwise, open a new tab to the applicable URL and focus it.
      if (!hadWindowToFocus)
        clients
          .openWindow(e.notification.data.url)
          .then((windowClient) => (windowClient ? windowClient.focus() : null));
    }),
  );
});

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

Спецификация
Сервис-воркеры
# clients-openwindow

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

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
openWindow
40["Перед Chrome 43 этот метод мог открывать только URL в той же области.", "Начиная с Chrome 51, URL могут открываться внутри существующего контекста просмотра, предоставляемого автономным веб-приложением."]
17 44 38 11.1
40["Перед Chrome Android 43 этот метод мог открывать только URL в той же области.", "Начиная с Chrome Android 51, URL могут открываться внутри существующего контекста просмотра, предоставляемого автономным веб-приложением."]
44 41 11.3
4.0["Перед Samsung Internet 4.0 этот метод мог открывать только URL в той же области.", "Начиная с Samsung Internet 5.0, URL могут открываться внутри существующего контекста просмотра, предоставляемого автономным веб-приложением."]
40["Перед WebView Android 43 этот метод мог открывать только URL в той же области.", "Начиная с WebView Android 51, URL могут открываться внутри существующего контекста просмотра, предоставляемого автономным веб-приложением."]

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Clients/openWindow

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API