<ribaunt-widget>-Web-Komponente und ihr React-Wrapper teilen sich dieselbe Konfigurationsoberfläche. HTML verwendet Attribute in Kebab-Case; React verwendet Props in CamelCase. Du kannst beide je nach Stack austauschbar nutzen — alles hier Beschriebene gilt für beide, sofern nicht anders angegeben.
Kurzbeispiel
Das folgende Snippet zeigt jedes verfügbare Attribut, gesetzt am HTML-Element:Referenz für Attribute und Props
| HTML-Attribut | React-Prop | Typ | Standard | Beschreibung | |
|---|---|---|---|---|---|
challenge-endpoint | challengeEndpoint | string | undefined | URL-Endpunkt, der { challenges: string[] } zurückgibt. Ist er undefiniert, kann das Widget nicht automatisch abrufen. | |
verify-endpoint | verifyEndpoint | string | undefined | URL-Endpunkt, an den die Lösungen per POST gesendet werden. Ist er undefiniert, musst du die Verifizierung manuell mit dem Solver direkt durchführen. | |
auto-verify | autoVerify | `boolean | string` | false | Startet die Verifizierung automatisch, sobald das Widget geladen ist. Setze auf "false" oder lasse es weg, um eine Benutzerinteraktion oder startVerification() zu erfordern. |
show-warning | showWarning | `boolean | string` | false | Zeigt ein rotes Warn-Banner über dem Widget an. Wird häufig verwendet, um Benutzer zu warnen, falls WebAssembly für zukünftige Fast-Solver fehlt. |
warning-message | warningMessage | string | "Enable WASM..." | Benutzerdefinierter Nachrichtentext für das Warn-Banner. | |
solve-timeout | solveTimeout | `number | string` | undefined | Optionaler Timeout in Millisekunden für das Lösen. Wird er weggelassen, gibt es kein automatisches Timeout. |
disabled | disabled | `boolean | string` | false | Deaktiviert Benutzerinteraktion und programmatische Verifizierung, solange gesetzt. |
Antwortformat des Challenge-Endpunkts
Deinchallenge-endpoint sollte einen JSON-Body zurückgeben, der die Challenge-Tokens enthält, die das Widget lösen wird. Das empfohlene Antwortformat ist { challenges: string[] }.
Das Widget akzeptiert drei Antwortformate vom
challenge-endpoint:{ challenges: string[] }— empfohlener Vertrag{ tokens: string[] }— Legacy-Kompatibilität- rohes
string[]— Legacy-Kompatibilität
Verhalten im Disabled-Zustand
Wenn dudisabled setzt (oder einen beliebigen Wert außer "false"), wechselt das Widget in einen vollständig inerten Zustand. Konkret bedeutet das:
- Klick-Interaktionen werden blockiert
- Tastaturaktivierungen werden blockiert
startVerification()wird zu einem No-Opauto-verifywird am Starten gehindert- Das Widget wird aus der Tab-Reihenfolge entfernt
aria-disabled="true"wird für Barrierefreiheit gesetzt
disabled, um Nutzer am erneuten Absenden zu hindern, während dein Server ein Formular verarbeitet, und entferne es, sobald die Antwort eintrifft. Hier ist ein React-Beispiel, das die Disabled-Prop basierend auf einem Lade-Flag umschaltet:
Imperative Methoden (über ref)
Du kannst Methoden direkt am Widget-Element aufrufen, um es programmatisch zu steuern. In React erhältst du eine typisierte Ref überRibauntWidgetHandle:
| Methode | Beschreibung |
|---|---|
startVerification() | Startet den Lösungsablauf programmatisch |
reset() | Setzt das Widget in den Anfangszustand zurück |
getState() | Gibt die aktuelle Widget-Zustands-Zeichenkette zurück |
Nur in React verfügbare Props
Zusätzlich zu den oben genannten Attributen akzeptiert der React-Wrapper typisierte Callback-Props und eineref. Diese haben kein HTML-Attribut-Äquivalent und werden vollständig innerhalb des React-Wrappers behandelt:
onVerify— wird ausgelöst, wenn die Verifizierung erfolgreich istonError— wird ausgelöst, wenn ein Fehler auftrittonStateChange— wird ausgelöst, wenn das Widget zwischen Zuständen wechseltonReady— wird einmal ausgelöst, nachdem das Widget gemountet wurdeonLoad— Alias füronReady, zur Abwärtskompatibilität bereitgestelltonEvent— Sammel-Handler für alle Ereignistypenref— imperativer Handle, derreset(),getState()undstartVerification()bereitstellt
Das Lösen im Browser erfordert HTTPS oder
http://localhost. Das Laden von einer einfachen LAN-URL (z. B. http://192.168.x.x) wird fehlschlagen, da die Web Crypto API nicht verfügbar ist.