Signatur
Beschreibung
Die statische Methode Credential.isConditionalMediationAvailable() gehört zur Credential Management API. Auf der Basisschnittstelle Credential gibt sie immer ein Promise zurück, das sich zu false auflöst. Sie ist die Standardimplementierung, die abgeleitete Klassen überschreiben können.
Die eigentlich interessante Variante ist PublicKeyCredential.isConditionalMediationAvailable(). Sie meldet, ob der Browser Conditional Mediation unterstützt. Gemeint ist das Autofill von Passkeys: Gespeicherte WebAuthn-Zugangsdaten werden direkt in der Vorschlagsliste eines Eingabefelds mit autocomplete="username webauthn" angeboten, sobald navigator.credentials.get({ mediation: "conditional" }) aufgerufen wird.
Durch die Methode auf der Basisklasse kann generischer Code auf jeder Credential-Unterklasse die gleiche Prüfung aufrufen, ohne vorher abzufragen, ob die Methode existiert. Klassen ohne eigene Unterstützung für Conditional Mediation liefern dann einfach false.
In der Praxis rufst du für Passkey-Autofill fast immer PublicKeyCredential.isConditionalMediationAvailable() auf. Die Basismethode ist vor allem für polymorphen oder generischen Code gedacht.
Rückgabewert
Credential immer zu false auflöst. Unterklassen wie PublicKeyCredential können true liefern, wenn Conditional Mediation unterstützt wird.Beispiele
Basismethode direkt aufrufen
const pruefeBasis = async () => {
if (typeof Credential?.isConditionalMediationAvailable !== "function") {
console.log("Methode wird nicht unterstützt");
return;
}
const verfuegbar = await Credential.isConditionalMediationAvailable();
console.log("Credential:", verfuegbar);
};
pruefeBasis();
Basisklasse und PublicKeyCredential vergleichen
const vergleiche = async () => {
const klassen = ["Credential", "PublicKeyCredential", "PasswordCredential"];
for (const name of klassen) {
const Klasse = globalThis[name];
if (typeof Klasse?.isConditionalMediationAvailable !== "function") {
console.log(`${name}: nicht verfügbar`);
continue;
}
console.log(`${name}:`, await Klasse.isConditionalMediationAvailable());
}
};
vergleiche();
Passkey-Autofill nur bei Unterstützung starten
// HTML: <input name="user" autocomplete="username webauthn">
const starteAutofill = async (challenge) => {
const unterstuetzt =
typeof PublicKeyCredential?.isConditionalMediationAvailable === "function" &&
(await PublicKeyCredential.isConditionalMediationAvailable());
if (!unterstuetzt) {
console.log("Kein Passkey-Autofill – klassisches Login anzeigen");
return null;
}
// challenge: Uint8Array vom Server
const credential = await navigator.credentials.get({
mediation: "conditional",
publicKey: { challenge, userVerification: "preferred" }
});
console.log("Angemeldet mit Passkey:", credential.id);
return credential;
};
starteAutofill(crypto.getRandomValues(new Uint8Array(32)));
// Wichtig · Fallstricke
- Immer
false: Auf der BasisklasseCredentialliefert die Methode grundsätzlichfalse. Für die Erkennung von Passkey-Autofill brauchst duPublicKeyCredential.isConditionalMediationAvailable(). - Browser-Kompatibilität: Die statische Methode auf
Credentialgibt es noch nicht in allen Browsern. Prüfe sie vor dem Aufruf mittypeof … === "function". Sonst wirft der Aufruf einenTypeError. - Sicherer Kontext: Die Credential Management API steht nur unter HTTPS (bzw.
localhost) zur Verfügung. - Das Promise wird nie verworfen, sondern immer mit einem Boolean erfüllt. Trotzdem gehört
awaitdazu. Ein unaufgelöstes Promise ist immer truthy, einif (Credential.isConditionalMediationAvailable())ohneawaitist also ein häufiger Fehler.