demo · v135
Error name probe
Catch errors from navigator.credentials.create() and compare the browser's error.name with the legacy payment path and the Chrome 135+ aligned path. The key migration is SecurityError to NotAllowedError for the missing-activation payment create failure.
PublicKeyCredential: ?
activation: ?
matrix
| condition | pre-135 legacy | Chrome 135+ aligned | this browser |
|---|---|---|---|
| payment credential create in the activationless iframe envelope | SecurityError | NotAllowedError | — |
| top-level create without a usable authenticator or user consent | NotAllowedError | NotAllowedError | — |
| AbortController abort() | AbortError | AbortError | — |
error log
Ready.
recommended catch block
try {
await navigator.credentials.create({ publicKey });
} catch (error) {
switch (error.name) {
case "NotAllowedError":
showActivationOrCancelHint();
break;
case "SecurityError":
showPolicyOrOriginFailure();
break;
case "AbortError":
showAbortedHint();
break;
default:
report(error);
}
}