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

new PresentationConnectionAvailableEvent()

Methode

Erzeugt ein neues <code>PresentationConnectionAvailableEvent</code>, das eine verfügbare <code>PresentationConnection</code> der Presentation API transportiert.

seit JavaScript Experimentell: nur Chromium-Browser (Chrome/Edge), Kategorie: webapi

Signatur

new PresentationConnectionAvailableEvent(type, options)

Beschreibung

Der Konstruktor PresentationConnectionAvailableEvent() erstellt ein Ereignisobjekt der Presentation API. Solche Ereignisse löst der Browser aus, sobald eine neue PresentationConnection zur Verfügung steht. Das passiert zum Beispiel am PresentationRequest als connectionavailable-Ereignis, wenn eine Präsentation über die Standardpräsentation (navigator.presentation.defaultRequest) gestartet wurde.

Im Normalfall erzeugt der Browser diese Ereignisse selbst. Den Konstruktor ruft man manuell vor allem in Tests, Mocks oder bei synthetischen Ereignissen auf, etwa um die eigene Verbindungslogik ohne echtes Zweitdisplay zu prüfen.

Wichtig: Das Options-Objekt muss die Eigenschaft connection enthalten. Sie muss auf ein echtes PresentationConnection-Objekt verweisen. Andernfalls wirft der Konstruktor einen TypeError. Da sich PresentationConnection nicht direkt instanziieren lässt, braucht man für ein synthetisches Ereignis in der Praxis eine bereits bestehende Verbindung.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, üblicherweise "connectionavailable". Groß- und Kleinschreibung wird beachtet.
$options Pflicht PresentationConnectionAvailableEventInit Objekt mit der Pflichteigenschaft connection (eine PresentationConnection). Außerdem sind die von EventInit geerbten Felder bubbles, cancelable und composed erlaubt (jeweils Standard false).

Rückgabewert

Typ
PresentationConnectionAvailableEvent
Beschreibung
Ein neues Ereignisobjekt, dessen schreibgeschützte Eigenschaft connection auf die übergebene PresentationConnection verweist.

Beispiele

Auf echte connectionavailable-Ereignisse reagieren

// Controller-Seite: Standardpräsentation festlegen
const request = new PresentationRequest(['receiver.html']);
navigator.presentation.defaultRequest = request;

request.addEventListener('connectionavailable', (event) => {
  // event ist ein PresentationConnectionAvailableEvent
  const { connection } = event;
  console.log('Verbindung verfügbar:', connection.id, connection.state);
  connection.addEventListener('message', (e) => console.log('Empfangen:', e.data));
});
Verbindung verfügbar: 3f2a... connecting

Synthetisches Ereignis mit bestehender Verbindung erzeugen

const request = new PresentationRequest(['receiver.html']);

const handleConnection = (event) => {
  console.log('Handler aufgerufen, Status:', event.connection.state);
};
request.addEventListener('connectionavailable', handleConnection);

// Muss durch eine Benutzeraktion ausgelöst werden
document.querySelector('#start').addEventListener('click', async () => {
  const connection = await request.start();

  // Dieselbe Verbindung erneut an die Anwendungslogik melden (z. B. im Test)
  const evt = new PresentationConnectionAvailableEvent('connectionavailable', {
    connection,
  });
  request.dispatchEvent(evt);
  console.log(evt instanceof Event, evt.connection === connection);
});
Handler aufgerufen, Status: connected true true

Fehlende connection-Option führt zu TypeError

try {
  new PresentationConnectionAvailableEvent('connectionavailable', {});
} catch (err) {
  console.log(err.name);
}
TypeError

// Wichtig · Fallstricke

  • Experimentell und eingeschränkt verfügbar: Die Presentation API gibt es praktisch nur in Chromium-Browsern (Chrome, Edge). Firefox und Safari unterstützen sie nicht. Vor der Nutzung sollte man die Verfügbarkeit prüfen, z. B. mit 'PresentationConnectionAvailableEvent' in window.
  • Die API steht nur in einem sicheren Kontext (HTTPS) zur Verfügung.
  • options.connection ist Pflicht. Fehlt die Eigenschaft oder ist sie kein PresentationConnection-Objekt, wirft der Konstruktor einen TypeError.
  • Selbst erzeugte Ereignisse haben isTrusted === false. Sie bauen keine echte Verbindung auf, sondern benachrichtigen nur die registrierten Listener.
  • PresentationRequest.start() funktioniert nur nach einer Benutzeraktion (transient activation).