Signatur
Beschreibung
Die Eigenschaft url einer PresentationConnection enthält die absolute URL der Präsentationsseite, mit der die Verbindung aufgebaut wurde. Die URL wurde vorher im Konstruktor new PresentationRequest(urls) angegeben. Hat man dort mehrere URLs übergeben, wählt der Browser bzw. das Empfangsgerät eine davon aus. Genau diese ausgewählte URL steht danach in url.
Nützlich ist die Eigenschaft vor allem in drei Fällen:
- Man will herausfinden, welche der angebotenen URLs tatsächlich genutzt wird, etwa eine Variante für einen bestimmten Bildschirmtyp.
- Man will
urlzusammen mitidspeichern, zum Beispiel inlocalStorage, um sich später mitPresentationRequest.prototype.reconnect(id)wieder mit derselben Präsentation zu verbinden. - Man protokolliert Verbindungen oder sucht Fehler.
Die Eigenschaft ist schreibgeschützt. Wer ihr etwas zuweist, bewirkt nichts, und im Strict Mode wird ein TypeError ausgelöst. Auf der Empfängerseite erhält man Verbindungen über navigator.presentation.receiver.connectionList. Auch dort hat jede Verbindung eine url-Eigenschaft.
Rückgabewert
USVString) der Präsentationsseite, mit der die Verbindung hergestellt oder wiederhergestellt wurde. Relative Angaben aus dem PresentationRequest werden gegen die Basis-URL des Dokuments aufgelöst.Beispiele
Ausgewählte Präsentations-URL nach dem Start auslesen
// Zwei Varianten anbieten – der Browser wählt eine passende aus
const request = new PresentationRequest([
'praesentation/hd.html',
'praesentation/basic.html'
]);
const startButton = document.querySelector('#start');
startButton.addEventListener('click', async () => {
try {
const connection = await request.start();
console.log('Verbunden mit:', connection.url);
console.log('Verbindungs-ID:', connection.id);
} catch (err) {
console.error('Präsentation nicht gestartet:', err.name);
}
});
URL und ID speichern und später wiederverbinden
const request = new PresentationRequest(['slides.html']);
const merken = (connection) => {
localStorage.setItem('praesentation', JSON.stringify({
id: connection.id,
url: connection.url
}));
};
const wiederverbinden = async () => {
const gespeichert = JSON.parse(localStorage.getItem('praesentation') ?? 'null');
if (!gespeichert) return null;
// Nur wiederverbinden, wenn die URL zur aktuellen Anfrage passt
const erwartet = new URL('slides.html', location.href).href;
if (gespeichert.url !== erwartet) return null;
const connection = await request.reconnect(gespeichert.id);
console.log('Wiederverbunden mit', connection.url);
return connection;
};
request.start().then(merken);
Empfängerseite: eingehende Verbindungen protokollieren
// Läuft in der Präsentationsseite auf dem Zweitbildschirm
if (navigator.presentation?.receiver) {
const list = await navigator.presentation.receiver.connectionList;
const logge = (connection) => {
console.log(`Verbindung ${connection.id} für ${connection.url} (${connection.state})`);
};
list.connections.forEach(logge);
list.addEventListener('connectionavailable', (event) => logge(event.connection));
}
// Wichtig · Fallstricke
- Kompatibilität: Die Presentation API ist experimentell. Nur Chromium-basierte Browser unterstützen sie, und auch dort ist sie teilweise an Cast-Geräte gebunden. Firefox und Safari unterstützen sie nicht. Prüfe deshalb vorher mit
'PresentationRequest' in window, ob die Schnittstelle vorhanden ist. - Sicherer Kontext: Die API ist nur über HTTPS verfügbar.
- Der Wert ist immer eine aufgelöste, absolute URL. Wer ihn direkt mit einer relativen Angaben-URL vergleicht, erhält
false. Normalisiere die Angabe deshalb vorher mitnew URL(pfad, location.href).href. - Bei mehreren angebotenen URLs darf man nicht annehmen, dass die erste gewählt wird. Nur
urlzeigt verlässlich, welche Variante tatsächlich läuft. - Die Eigenschaft ist schreibgeschützt. Um eine andere Seite zu präsentieren, braucht man einen neuen
PresentationRequest.