Start · Sprachen · JavaScript · Referenz · MediaTrackSupportedConstraints.displaySurface

MediaTrackSupportedConstraints.displaySurface

Eigenschaft

Boolescher Wert, der angibt, ob der Browser die Einschränkung <code>displaySurface</code> für Bildschirmaufnahmen mit <code>getDisplayMedia()</code> unterstützt.

seit JavaScript Chrome 107+, Edge 107+, Firefox 66+ (Wert true), S Kategorie: webapi

Signatur

MediaTrackSupportedConstraints.displaySurface

Beschreibung

Die Eigenschaft displaySurface gehört zum Wörterbuch MediaTrackSupportedConstraints, das navigator.mediaDevices.getSupportedConstraints() zurückgibt. Ist sie vorhanden und hat den Wert true, versteht der Benutzeragent die Einschränkung displaySurface. Fehlt sie, wird die Einschränkung nicht unterstützt. Den Wert false gibt es in der Praxis nicht.

Über die Einschränkung displaySurface legt man fest, welche Art von Bildschirmoberfläche bei einer Bildschirmfreigabe mit getDisplayMedia() bevorzugt werden soll: "monitor" (ganzer Bildschirm), "window" (einzelnes Anwendungsfenster) oder "browser" (Browser-Tab). Liest man die Einstellungen eines laufenden Tracks mit MediaStreamTrack.getSettings() aus, erfährt man außerdem, welche Oberfläche der Nutzer tatsächlich gewählt hat.

Die Eigenschaft ist gedacht für die Funktionserkennung. Bevor man displaySurface als Hinweis an getDisplayMedia() übergibt oder in der Oberfläche anzeigt (z. B. „Sie teilen gerade einen Tab“), sollte man prüfen, ob der Browser die Einschränkung überhaupt kennt.

Rückgabewert

Typ
boolean | undefined
Beschreibung
true, wenn die Einschränkung displaySurface unterstützt wird. Wird sie nicht unterstützt, fehlt die Eigenschaft (undefined).

Beispiele

Unterstützung prüfen

const supported = navigator.mediaDevices.getSupportedConstraints();

if (supported.displaySurface) {
  console.log('displaySurface wird unterstützt');
} else {
  console.log('displaySurface wird nicht unterstützt');
}
displaySurface wird unterstützt

Browser-Tab als bevorzugte Freigabe vorschlagen

const startTabShare = async () => {
  const { displaySurface } = navigator.mediaDevices.getSupportedConstraints();

  const videoConstraints = displaySurface
    ? { displaySurface: 'browser' } // nur ein Hinweis, der Nutzer entscheidet selbst
    : true;

  const stream = await navigator.mediaDevices.getDisplayMedia({
    video: videoConstraints,
    audio: false
  });
  document.querySelector('video').srcObject = stream;
  return stream;
};

document.querySelector('#share').addEventListener('click', () => {
  startTabShare().catch((err) => console.error('Freigabe abgebrochen:', err.name));
});

Tatsächlich gewählte Oberfläche auswerten

const describeShare = async () => {
  const stream = await navigator.mediaDevices.getDisplayMedia({ video: true });
  const [track] = stream.getVideoTracks();

  if (!navigator.mediaDevices.getSupportedConstraints().displaySurface) {
    return 'Unbekannte Oberfläche';
  }

  const labels = { monitor: 'ganzer Bildschirm', window: 'Fenster', browser: 'Browser-Tab' };
  const { displaySurface } = track.getSettings();
  return `Sie teilen: ${labels[displaySurface] ?? displaySurface}`;
};

describeShare().then(console.log);
Sie teilen: Browser-Tab

// Wichtig · Fallstricke

  • Nur ein Hinweis: Die Einschränkung displaySurface ist bei getDisplayMedia() lediglich eine Vorgabe dafür, welche Option im Auswahldialog vorausgewählt wird. Der Nutzer kann trotzdem jede andere Oberfläche wählen. Werte wie exact oder min/max sind nicht erlaubt und führen zu einem TypeError.
  • Das Ergebnis immer prüfen: Die tatsächlich geteilte Oberfläche erfährt man nur über track.getSettings().displaySurface. Auf die übergebene Vorgabe sollte man sich nicht verlassen.
  • Fehlt statt false: Wird die Einschränkung nicht unterstützt, fehlt die Eigenschaft einfach. Deshalb auf Wahrheitswert prüfen (if (supported.displaySurface)) und nicht mit === false vergleichen.
  • Browser-Kompatibilität: Chromium-Browser werten die Vorgabe seit Version 107 im Auswahldialog aus. Firefox und Safari melden die Unterstützung zwar, liefern den Wert aber teils nur in getSettings() und übergehen die Vorgabe im Dialog. getDisplayMedia() funktioniert nur in sicheren Kontexten (HTTPS) und muss durch eine Nutzeraktion ausgelöst werden. Auf Mobilgeräten ist es weitgehend nicht verfügbar.