Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Clients: openWindow() Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨April 2018⁩.

Hinweis: Diese Funktion ist nur in Service Workers verfügbar.

Die openWindow() Methode des Clients Interface erstellt einen neuen obersten Browsing-Kontext und lädt eine gegebene URL. Falls das aufrufende Skript nicht die Berechtigung hat, Popups anzuzeigen, wird openWindow() einen InvalidAccessError auslösen.

In Firefox darf die Methode nur dann Popups anzeigen, wenn sie als Ergebnis eines Benachrichtigungs-Klickevents aufgerufen wird.

In Chrome für Android kann die Methode stattdessen die URL in einem bereits vorhandenen Browsing-Kontext öffnen, der von einer zuvor auf den Startbildschirm des Nutzers hinzugefügten standalone web app bereitgestellt wird. Kürzlich funktioniert dies auch in Chrome für Windows.

Syntax

js
openWindow(url)

Parameter

url

Ein String, der die URL des Clients repräsentiert, den Sie im Fenster öffnen möchten. Im Allgemeinen muss dieser Wert eine URL aus dem gleichen Ursprung wie das aufrufende Skript sein.

Rückgabewert

Ein Promise, das zu einem WindowClient Objekt aufgelöst wird, wenn die URL vom gleichen Ursprung wie der Service Worker stammt, oder andernfalls ein null Wert.

Ausnahmen

InvalidAccessError DOMException

Das Versprechen wird mit dieser Ausnahme abgelehnt, wenn keines der Fenster im Ursprungsbereich der App eine transiente Aktivierung aufweist.

Sicherheitsanforderungen

Beispiele

js
// 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) => {
      const windowToFocus = clientsArr.find(
        (windowClient) => windowClient.url === e.notification.data.url,
      );
      if (windowToFocus) {
        // If a Window tab matching the targeted URL already exists, focus that;
        windowToFocus.focus();
      } else {
        // Otherwise, open a new tab to the applicable URL and focus it.
        clients
          .openWindow(e.notification.data.url)
          .then((windowClient) => (windowClient ? windowClient.focus() : null));
      }
    }),
  );
});

Spezifikationen

Specification
Service Workers Nightly
# clients-openwindow

Browser-Kompatibilität