Widget
Tous les attributs, les trois modes et l'API JavaScript pour les formulaires chargés ultérieurement.
Options du widget
Le widget se configure via des attributs data-. Ils se placent sur le conteneur portant data-captchacore-widget, certains également sur le formulaire. Chaque valeur ici remplace le réglage par défaut défini pour le site dans l'administration.
| Attribut | Valeurs | Standard | Description |
|---|---|---|---|
| data-theme | auto | light | dark | auto | Thème de couleur. auto suit le réglage système du visiteur. |
| data-color | Couleur hexadécimale | #34d399 | Couleur d'accent pour la case et la bordure |
| data-label | Texte | selon la langue | Libellé à côté de la case |
| data-brand | Texte ou vide | CaptchaCore | Marque à droite, vide = masquée |
| data-size | normal | compact | normal | normal fait 360 px de large, compact 300 px |
| data-lang | de en fr es it nl pl pt tr ja zh ko ar ru | langue de la page | Langue des textes du widget. Sans valeur, l'attribut lang du formulaire compte, sinon celui de l'élément <html>. |
| data-start | auto | focus | none | auto | Quand la vérification démarre : immédiatement, au premier focus dans le formulaire, ou seulement au clic. |
| data-mode | interactive | visible | invisible | interactive | Remplace le mode défini dans l'administration pour ce seul formulaire. |
| data-form-type | login register contact comment checkout password_reset newsletter custom | — | Détermine quelle politique de formulaire s'applique. Se place sur le formulaire ou le conteneur. |
Attributs sur la balise script
Ces valeurs se placent sur l'élément <script> lui-même et s'appliquent à tous les widgets de la page.
| Attribut | Obligatoire | Description |
|---|---|---|
| data-site-key | oui | Clé publique du site (cc_pub_…). |
| data-service-url | oui | https://api.captchacore.eu |
| data-worker-url | non | Chemin personnalisé vers le worker de preuve de travail, nécessaire seulement avec un hébergement différent. |
| data-fail-open | non | Uniquement false : le formulaire attend au lieu d'envoyer le marqueur cc-unavailable après une erreur de connexion persistante. |
Modes du widget
Le mode se définit avec data-mode="..." sur l'élément du widget <div data-captchacore-widget> ; à défaut, le réglage du site dans l'espace client s'applique.
interactive
Recommandé Widget toujours visible. Le PoW se résout automatiquement. La case se coche d’elle-même dès qu’une interaction humaine suffisante est détectée (2+ caractères saisis, mouvement de souris, 2+ secondes). Aucun clic nécessaire pour les vrais utilisateurs. Repli : clic manuel.
visible
Widget visible. L’utilisateur doit cliquer sur la case pour lancer la vérification. Semblable à reCAPTCHA v2.
invisible
Aucune interface visible. Le PoW se résout entièrement en arrière-plan. Le jeton est inséré automatiquement à l’envoi. Idéal lorsqu’aucune protection visible n’est souhaitée.
API JavaScript du widget
Le script crée l'objet global CaptchaCoreV2. Sur des pages statiques, vous n'en avez pas besoin : le widget se lie de lui-même à tous les formulaires correspondants au chargement. L'API devient utile dès que des formulaires sont chargés en JavaScript, donc dans les systèmes de boutique, les applications monopage et les fenêtres modales.
| Méthode | Finalité |
|---|---|
| CaptchaCoreV2.init(config) | Initialisation manuelle lorsque le script a été inclus sans attributs data. Attend au moins siteKey et serviceUrl. |
| CaptchaCoreV2.attach() | Recherche à nouveau les formulaires et lie les nouveaux. À appeler après chaque remplacement du DOM. |
| CaptchaCoreV2.destroy() | Détache tous les widgets, arrête l'observateur et nettoie. Utile avant un changement de page dans une SPA. |
| CaptchaCoreV2.getWidgets() | Renvoie les instances de widget actuellement liées. |
| CaptchaCoreV2.getWidget(form) | Le widget d’un formulaire donné (élément ou sélecteur CSS), sinon null. |
| widget.getToken() | Jeton pour exactement un appel à /verify, avec les données comportementales collectées depuis le chargement. Charge ensuite immédiatement le défi suivant — pour les formulaires AJAX avec plusieurs envois par page. |
| CaptchaCoreV2.getLanguages() | Liste des 14 codes de langue pris en charge. |
| CaptchaCoreV2.on(event, fn) | S'abonner à un événement. |
| CaptchaCoreV2.off(event, fn) | Résilier l'abonnement. |
Événements
CaptchaCoreV2.on('ready', function (data) { // Widget ist gebunden und einsatzbereit }); CaptchaCoreV2.on('error', function (err) { // Netzwerkfehler, abgelaufener Nonce, ungültiger Schlüssel console.warn('CaptchaCore:', err); });
Formulaires chargés ultérieurement
Le widget surveille le contenu de la page et détecte de lui-même les nouveaux formulaires portant data-captchacore. Cela couvre la plupart des cas. Si toutefois un formulaire est remplacé puis envoyé dans la foulée, l'observateur peut arriver trop tard : appelez alors explicitement attach() après l'insertion.
// Beispiel: Formular per fetch nachgeladen const html = await (await fetch(url)).text(); container.innerHTML = html; CaptchaCoreV2.attach(); // bindet das neue Formular an
Envoyer des formulaires via fetch()
Si votre formulaire est envoyé via fetch() ou XHR et permet plusieurs envois par page (recherche, vérification de domaine, panier), demandez un jeton distinct avec widget.getToken() avant chaque requête. Chaque jeton vaut pour exactement une vérification ; le widget résout le défi suivant en arrière-plan pendant que le visiteur continue. Les appels simultanés sont traités l’un après l’autre et ne reçoivent jamais le même jeton.
const form = document.querySelector('#domaincheck'); form.addEventListener('submit', async (e) => { e.preventDefault(); const body = new FormData(form); try { body.set('captchacore_token', await CaptchaCoreV2.getWidget(form).getToken()); } catch { // Dienst nicht erreichbar: Platzhalter senden, Ihr Server entscheidet (Fail-Open) body.set('captchacore_token', 'cc-unavailable'); } const res = await fetch('/domaincheck', { method: 'POST', body, headers: { Accept: 'application/json' }, // Fehler als JSON statt Weiterleitung }); });
Pour les systèmes de boutique et de forum
Des systèmes comme Shopware, WooCommerce ou phpBB remplacent souvent l'inscription, les formulaires d'adresse et les champs de commentaire via AJAX. Rattachez attach() à l'événement correspondant du système, une fois le nouveau contenu dans le DOM. Un second appel ne nuit pas : les formulaires déjà liés sont ignorés.