Start · Sprachen · JavaScript · Referenz · PresentationAvailability.value

PresentationAvailability.value

Eigenschaft

Schreibgeschützter boolescher Wert, der angibt, ob gerade mindestens ein passendes Präsentationsdisplay (z. B. Chromecast, zweiter Bildschirm) erreichbar ist.

seit JavaScript Experimentell: nur Chromium-basierte Browser (Chro Kategorie: webapi

Signatur

PresentationAvailability.value

Beschreibung

Die Eigenschaft value eines PresentationAvailability-Objekts gibt an, ob der Browser derzeit mindestens ein Präsentationsdisplay findet, das mit den URLs des zugehörigen PresentationRequest kompatibel ist. Laut Spezifikation muss sie immer den zuletzt vom Browser gesetzten Wert liefern – sie ist also ein Momentaufnahme-Zustand, der sich jederzeit ändern kann.

An ein PresentationAvailability-Objekt kommt man über PresentationRequest.prototype.getAvailability(), das ein Promise zurückgibt. Typischer Anwendungsfall: Einen „Auf Bildschirm übertragen“-Button nur dann einblenden oder aktivieren, wenn tatsächlich ein Zielgerät verfügbar ist.

Weil sich die Verfügbarkeit ändert (Gerät eingeschaltet, WLAN verlassen, Kabel abgezogen), sollte man value nicht nur einmal auslesen, sondern zusätzlich auf das change-Event reagieren – per addEventListener("change", …) oder über die Eigenschaft onchange. Im Handler liest man dann erneut value aus.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn mindestens ein kompatibles Präsentationsdisplay verfügbar ist, sonst false. Schreibgeschützt.

Beispiele

Verfügbarkeit einmalig abfragen

const request = new PresentationRequest(['https://example.com/receiver.html']);

const checkAvailability = async () => {
  try {
    const availability = await request.getAvailability();
    console.log('Display verfügbar:', availability.value);
  } catch (err) {
    // NotSupportedError: Hintergrund-Überwachung nicht unterstützt
    console.warn('Verfügbarkeit nicht ermittelbar:', err.name);
  }
};

checkAvailability();
Display verfügbar: false

Cast-Button dynamisch ein- und ausblenden

const castButton = document.querySelector('#cast-button');
const request = new PresentationRequest(['/slides/receiver.html']);

const updateButton = (available) => {
  castButton.hidden = !available;
};

request.getAvailability()
  .then((availability) => {
    updateButton(availability.value);
    // Auf spätere Änderungen reagieren
    availability.addEventListener('change', () => {
      updateButton(availability.value);
    });
  })
  .catch(() => updateButton(true)); // Fallback: Button zeigen, start() zeigt Geräteauswahl

castButton.addEventListener('click', async () => {
  const connection = await request.start();
  console.log('Verbunden, Status:', connection.state);
});

Mit onchange und Feature-Erkennung

if ('PresentationRequest' in window) {
  const request = new PresentationRequest(['https://example.com/tv.html']);
  const availability = await request.getAvailability();

  availability.onchange = () => {
    console.log(availability.value
      ? 'Präsentationsdisplay gefunden'
      : 'Kein Präsentationsdisplay mehr erreichbar');
  };
} else {
  console.log('Presentation API wird nicht unterstützt');
}
Presentation API wird nicht unterstützt

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Die Presentation API ist experimentell und praktisch nur in Chromium-Browsern (Chrome, Edge, Opera) verfügbar. Firefox und Safari unterstützen sie nicht – immer per 'PresentationRequest' in window prüfen.
  • Sicherer Kontext: Nur über HTTPS (bzw. localhost) nutzbar.
  • value ist schreibgeschützt; eine Zuweisung wird ignoriert (im Strict Mode TypeError).
  • getAvailability() kann mit NotSupportedError abgelehnt werden, wenn der Browser keine dauerhafte Überwachung unterstützt (z. B. auf manchen Mobilgeräten). Dann trotzdem einen Button anbieten – start() kann weiterhin funktionieren.
  • value === false heißt nicht zwingend „nie verfügbar“: Die Geräteerkennung läuft asynchron, der Wert kann kurz nach dem Abruf auf true wechseln. Deshalb immer auf change reagieren.
  • Die Hintergrundsuche nach Displays verbraucht Energie; den Listener entfernen, wenn er nicht mehr benötigt wird.