Start · Sprachen · JavaScript · Referenz · new DocumentPictureInPictureEvent()

new DocumentPictureInPictureEvent()

Methode

Erzeugt ein neues <code>DocumentPictureInPictureEvent</code>. Dieses Ereignis verweist auf das zugehörige Bild-im-Bild-Fenster (Document Picture-in-Picture).

seit JavaScript Experimentell: Chrome/Edge 116+ (nur Desktop), nic Kategorie: webapi

Signatur

new DocumentPictureInPictureEvent(type, options)

Beschreibung

Der Konstruktor DocumentPictureInPictureEvent() legt eine neue Instanz des Interfaces DocumentPictureInPictureEvent an. Der Browser löst dieses Ereignis selbst als enter-Event am Objekt window.documentPictureInPicture aus, sobald über documentPictureInPicture.requestWindow() ein Bild-im-Bild-Fenster geöffnet wurde. Über die Eigenschaft event.window erreicht man dann das Window-Objekt dieses Fensters.

Den Konstruktor ruft man selbst nur selten auf. Nützlich ist er vor allem in Unit-Tests und Mocks: Damit lässt sich prüfen, ob die eigene Logik für das enter-Ereignis richtig reagiert, ohne dass ein echtes Bild-im-Bild-Fenster aufgehen muss. Genauso eignet er sich für eigene Ereignis-Busse, die dieselbe Ereignis-Form nachbilden.

Die Pflichtangabe im Options-Objekt ist window. Dazu kommen die üblichen Felder aus EventInit (bubbles, cancelable, composed). Selbst erzeugte Ereignisse haben immer isTrusted === false.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses. Die Spezifikation verwendet dafür "enter".
$options Pflicht object Das Initialisierungsobjekt. Es erbt die Felder von EventInit und ergänzt diese Einstellungen:
  • window (Window, Pflicht): das Bild-im-Bild-Fenster, auf das das Ereignis verweist.
  • bubbles (boolean, Standardwert false): Gibt an, ob das Ereignis aufsteigt (Bubbling).
  • cancelable (boolean, Standardwert false): Gibt an, ob sich das Ereignis abbrechen lässt.
  • composed (boolean, Standardwert false): Gibt an, ob das Ereignis die Grenze eines Shadow DOM überschreitet.

Rückgabewert

Typ
DocumentPictureInPictureEvent
Beschreibung
Ein neues DocumentPictureInPictureEvent. Die schreibgeschützte Eigenschaft window verweist auf das übergebene Fenster.

Beispiele

Ereignis manuell erzeugen und auslesen

// Zu Testzwecken steht das aktuelle Fenster für das Bild-im-Bild-Fenster
const event = new DocumentPictureInPictureEvent('enter', {
  window: window,
});

console.log(event.type);                // Ereignisname
console.log(event.window === window);   // verweist auf das übergebene Fenster
console.log(event.isTrusted);           // selbst erzeugt, also nicht vertrauenswürdig
enter true false

Auf das echte enter-Ereignis reagieren

const button = document.querySelector('#pip-button');
const player = document.querySelector('#player');

// Der Browser löst "enter" selbst aus, sobald das Fenster offen ist
documentPictureInPicture.addEventListener('enter', (event) => {
  const pipWindow = event.window;
  console.log('Bild-im-Bild geöffnet:', pipWindow.innerWidth, 'x', pipWindow.innerHeight);

  // Beim Schließen den Player in die Hauptseite zurückholen
  pipWindow.addEventListener('pagehide', () => {
    document.body.append(player);
  });
});

button.addEventListener('click', async () => {
  // requestWindow() braucht eine Nutzergeste (hier der Klick)
  const pipWindow = await documentPictureInPicture.requestWindow({ width: 400, height: 240 });
  pipWindow.document.body.append(player);
});
Bild-im-Bild geöffnet: 400 x 240

Handler im Test mit einem simulierten Ereignis prüfen

// Die Logik, die getestet werden soll
const onEnter = (event) => {
  event.window.document.title = 'Mini-Player';
  return event.window.document.title;
};

// Ein Iframe dient als Ersatz für das Bild-im-Bild-Fenster
const iframe = document.createElement('iframe');
document.body.append(iframe);

const fakeEvent = new DocumentPictureInPictureEvent('enter', {
  window: iframe.contentWindow,
});

console.log(onEnter(fakeEvent));
iframe.remove();
Mini-Player

// Wichtig · Fallstricke

  • Experimentell: Die Document Picture-in-Picture API gibt es bisher nur in Chromium-Browsern ab Version 116, und zwar nur auf dem Desktop. Vor der Nutzung sollte man prüfen, ob die API vorhanden ist, z. B. mit 'documentPictureInPicture' in window oder typeof DocumentPictureInPictureEvent === 'function'.
  • Fehlt window im Options-Objekt, wirft der Konstruktor einen TypeError, denn das Feld ist Pflicht.
  • Ein selbst erzeugtes Ereignis öffnet kein Bild-im-Bild-Fenster. Das kann nur documentPictureInPicture.requestWindow(), und dafür braucht es eine Nutzergeste sowie einen sicheren Kontext (HTTPS).
  • Selbst ausgelöste Ereignisse haben isTrusted === false. Code, der aus Sicherheitsgründen auf isTrusted prüft, reagiert deshalb nicht darauf.
  • Pro Seite kann nur ein Bild-im-Bild-Fenster offen sein. Ein erneuter Aufruf von requestWindow() schließt das bisherige Fenster.