Start · Sprachen · JavaScript · Referenz · PresentationRequest.getAvailability()

PresentationRequest.getAvailability()

Methode

Gibt ein <code>Promise</code> zurück, das mit einem <code>PresentationAvailability</code>-Objekt erfüllt wird. Es meldet, ob gerade ein passendes Präsentationsdisplay verfügbar ist.

seit JavaScript Experimentell: Chromium-basierte Browser (Chrome/E Kategorie: webapi

Signatur

PresentationRequest.prototype.getAvailability()

Beschreibung

Die Methode getAvailability() gehört zur Presentation API. Sie fragt den Browser, ob für die URLs des PresentationRequest gerade mindestens ein passendes Präsentationsdisplay erreichbar ist, etwa ein Chromecast, ein Smart-TV oder ein zweiter Bildschirm. Das Ergebnis ist ein PresentationAvailability-Objekt. Dessen Eigenschaft value ist ein boolescher Wert, und bei jeder Änderung löst es das Ereignis change aus.

Typischerweise nutzt man die Methode, um einen „Auf Bildschirm übertragen“-Knopf nur dann anzuzeigen oder zu aktivieren, wenn wirklich ein Ziel vorhanden ist. So klickt der Benutzer nicht vergeblich auf start() und landet in einem leeren Auswahldialog.

Laut Spezifikation darf der Browser für dieselbe Anfrage immer dasselbe PresentationAvailability-Objekt zurückgeben. Sucht der Browser nicht dauerhaft im Hintergrund nach Displays (zum Beispiel, um Strom zu sparen), wird das Promise mit einem NotSupportedError abgelehnt. In diesem Fall sollte die Anwendung den Knopf trotzdem anzeigen und die Verfügbarkeit erst über start() feststellen.

Rückgabewert

Typ
Promise<PresentationAvailability>
Beschreibung
Ein Promise, das mit einem PresentationAvailability-Objekt erfüllt wird. availability.value ist true, wenn mindestens ein kompatibles Display verfügbar ist. Wird mit NotSupportedError abgelehnt, wenn der Browser die Verfügbarkeit nicht dauerhaft überwachen kann, und mit SecurityError oder InvalidAccessError in unsicheren oder nicht erlaubten Kontexten.

Beispiele

Verfügbarkeit einmalig prüfen

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

const checkDisplay = async () => {
  try {
    const availability = await request.getAvailability();
    console.log('Display verfügbar:', availability.value);
  } catch (err) {
    console.warn('Verfügbarkeit nicht ermittelbar:', err.name);
  }
};

checkDisplay();
Display verfügbar: true

Cast-Knopf abhängig von der Verfügbarkeit ein- und ausblenden

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

const initCastButton = async () => {
  try {
    const availability = await request.getAvailability();
    const update = () => { castButton.hidden = !availability.value; };
    update();
    // Reagiert, wenn ein Display dazukommt oder wegfällt
    availability.addEventListener('change', update);
  } catch (err) {
    if (err.name === 'NotSupportedError') {
      // Keine Hintergrundsuche möglich: Knopf trotzdem anzeigen
      castButton.hidden = false;
    }
  }
};

castButton.addEventListener('click', async () => {
  const connection = await request.start();
  connection.addEventListener('connect', () => connection.send('Hallo Empfänger!'));
});

if ('PresentationRequest' in window) initCastButton();

Feature-Erkennung mit Fallback

const supportsPresentation = () =>
  'PresentationRequest' in window &&
  typeof PresentationRequest.prototype.getAvailability === 'function';

console.log(supportsPresentation() ? 'Presentation API vorhanden' : 'Nicht unterstützt');
Presentation API vorhanden

// Wichtig · Fallstricke

  • Experimentell: Die API wird nur von Chromium-basierten Browsern unterstützt. Firefox und Safari bieten sie nicht an. Prüfe deshalb vorher immer mit 'PresentationRequest' in window, ob sie vorhanden ist.
  • Funktioniert nur in einem sicheren Kontext (HTTPS). In eingebetteten Frames kann die Permissions-Policy presentation nötig sein.
  • Ein NotSupportedError heißt nicht, dass kein Display vorhanden ist. Er bedeutet nur, dass der Browser nicht dauerhaft im Hintergrund danach sucht. Blende den Knopf deshalb in diesem Fall nicht aus.
  • availability.value === false kann sich jederzeit ändern. Höre auf das Ereignis change (oder setze onchange), statt den Wert nur einmal abzufragen.
  • Die Suche nach Displays kostet Akku und Netzwerkressourcen. Rufe die Methode nur auf, wenn die Übertragungsfunktion auch wirklich angeboten wird.