Start · Sprachen · JavaScript · Referenz · HTMLVideoElement.disablePictureInPicture

HTMLVideoElement.disablePictureInPicture

Eigenschaft

Boolesche Eigenschaft, die das HTML-Attribut <code>disablepictureinpicture</code> widerspiegelt und die Bild-im-Bild-Funktion (Picture-in-Picture) für ein Video abschaltet.

seit JavaScript Chrome/Edge 76+, Opera; nicht in Firefox – kein Ba Kategorie: webapi

Signatur

HTMLVideoElement.disablePictureInPicture

Beschreibung

Die Eigenschaft disablePictureInPicture eines <video>-Elements gibt an, ob der Browser das Video im Bild-im-Bild-Modus (engl. Picture-in-Picture, kurz PiP) anzeigen darf. Sie spiegelt das boolesche HTML-Attribut disablepictureinpicture wider. Wenn Sie die Eigenschaft auf true setzen, wird das Attribut gesetzt. Bei false wird es entfernt.

Ist die Eigenschaft true, blendet der Browser seine eigenen PiP-Bedienelemente aus, etwa den Eintrag im Kontextmenü oder die Schaltfläche in den Standard-Steuerelementen. Außerdem schlägt ein Aufruf von HTMLVideoElement.requestPictureInPicture() fehl: Das zurückgegebene Promise wird mit einer DOMException vom Typ InvalidStateError zurückgewiesen.

Typische Einsatzfälle:

  • Hintergrund- oder Deko-Videos: Stumme Videos, die automatisch in einer Schleife laufen, ergeben in einem schwebenden Fenster keinen Sinn.
  • Werbung: Werbe-Clips sollen nicht aus der Seite herausgelöst werden.
  • Eigene Player-Logik: Die App will selbst steuern, wann PiP verfügbar ist, zum Beispiel erst nach dem Login oder nur für bestimmte Inhalte.

Die Eigenschaft ist ein Hinweis an den Browser, aber kein Kopierschutz. Browser-Erweiterungen oder eigene Browser-Funktionen können sie umgehen.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn das Attribut disablepictureinpicture gesetzt ist und PiP damit deaktiviert ist, sonst false (Standardwert). Die Eigenschaft ist les- und schreibbar.

Beispiele

PiP für ein Hintergrundvideo abschalten

// HTML: <video id="hero" autoplay muted loop src="hero.mp4"></video>
const hero = document.querySelector('#hero');

hero.disablePictureInPicture = true;

console.log(hero.disablePictureInPicture);
console.log(hero.hasAttribute('disablepictureinpicture'));
true true

Wirkung auf requestPictureInPicture() prüfen

const video = document.querySelector('video');
video.disablePictureInPicture = true;

try {
  await video.requestPictureInPicture();
} catch (err) {
  console.log(err.name); // PiP ist gesperrt
}
InvalidStateError

Eigene PiP-Schaltfläche passend ein- und ausblenden

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

const updatePipButton = () => {
  const supported = 'pictureInPictureEnabled' in document && document.pictureInPictureEnabled;
  pipButton.hidden = !supported || video.disablePictureInPicture;
};

// Beispiel: PiP erst nach dem Login freigeben
const onLogin = () => {
  video.disablePictureInPicture = false;
  updatePipButton();
};

pipButton.addEventListener('click', async () => {
  if (document.pictureInPictureElement) {
    await document.exitPictureInPicture();
  } else {
    await video.requestPictureInPicture();
  }
});

video.disablePictureInPicture = true;
updatePipButton();

Laufenden PiP-Modus beim Sperren sauber beenden

const lockPip = async (video) => {
  video.disablePictureInPicture = true;
  // Nicht darauf verlassen, dass der Browser das Fenster selbst schließt
  if (document.pictureInPictureElement === video) {
    await document.exitPictureInPicture();
  }
};

await lockPip(document.querySelector('video'));
console.log(document.pictureInPictureElement);
null

// Wichtig · Fallstricke

Browser-Kompatibilität: Chromium-basierte Browser (Chrome, Edge, Opera) unterstützen die Eigenschaft seit Version 76 bzw. 79. Firefox unterstützt die Standard-PiP-API nicht und ignoriert das Attribut. Die eigene PiP-Schaltfläche von Firefox lässt sich damit also nicht zuverlässig ausblenden. Safari hat eine eigene, abweichende Umsetzung (webkitSetPresentationMode()). Prüfen Sie die Unterstützung vorher per Feature-Erkennung, z. B. mit 'disablePictureInPicture' in HTMLVideoElement.prototype.

  • Laufendes PiP-Fenster: Setzen Sie die Eigenschaft auf true, während das Video schon im PiP-Modus läuft, ist nicht garantiert, dass der Browser das Fenster schließt. Rufen Sie in diesem Fall selbst document.exitPictureInPicture() auf.
  • Boolesches Attribut: Im HTML zählt nur, ob das Attribut vorhanden ist. Auch disablepictureinpicture="false" deaktiviert PiP. Zum Aktivieren entfernen Sie das Attribut oder setzen die Eigenschaft auf false.
  • Kein Schutzmechanismus: Die Eigenschaft verhindert nicht zuverlässig, dass Inhalte herausgelöst oder mitgeschnitten werden. Für geschützte Inhalte brauchen Sie DRM (Encrypted Media Extensions).
  • Die Eigenschaft wirkt nur auf <video>-Elemente, nicht auf <audio>.