/
bitrix-dev
/
Starter-kit
Обзор
Документация
Войти
/
bitrix-dev
/
Starter-kit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
main
local/js/smartcaptcha/smartcaptcha.js
86 строк
3 KB
Alexey Karizhenskiy
Первая сборка (из ранее используемого)
19 янв 2026, 21:00
19 янв 2026, 21:00
d843e36
Код
Авторство
О чём код?
// Подключить скрипт капчи (function () { let captchaScript = document.createElement('script'); captchaScript.src = 'https://smartcaptcha.yandexcloud.net/captcha.js?render=onload&onload=initSmartCaptcha'; captchaScript.defer = true; document.head.appendChild(captchaScript); })(); // Массив для хранения капч window.CaptchaWidgets = []; // Инициализировать капчу window.initSmartCaptcha = () => { } // Инициализировать капчу для формы window.initFormCaptcha = (form, invisible, callback) => { invisible = invisible || false; callback = callback || function () { }; // Проверяем существующие виджеты для этой формы let existingWidget = window.CaptchaWidgets.find(widget => widget.form === form); if (existingWidget) { return existingWidget; } if (!window.smartCaptcha) { // Если капча не доступна, повторить попытку через 1 секунду setTimeout(() => { window.initFormCaptcha(form, invisible, callback); }, 1000); return; } // Проверить контейнер капчи let captchaContainer = form.querySelector('[data-smartcaptcha]'); if (!captchaContainer) { // При отсутствии контейнера капчи, создать его captchaContainer = document.createElement('div'); captchaContainer.classList.add('smartcaptcha-container'); // Вставить перед кнопкой submit let btnSubmit = form.querySelector('[type="submit"]'); if (btnSubmit) { btnSubmit.parentNode.insertBefore(captchaContainer, btnSubmit); } else { // Вставить в конец формы form.appendChild(captchaContainer); } } else { // Если контейнер капчи не пустой, выходим if (captchaContainer.children.length > 0) { return; } } let widgetId = window.smartCaptcha.render(captchaContainer, { sitekey: window.smartCaptchaKey, invisible: invisible, hideShield: true, callback: (token) => { callback(token); }, }); let widget = { widgetId: widgetId, form: form, callback: callback, check: () => { // Если токен уже получен, то вызываем callback let token = form.querySelector('input[name="smart-token"]')?.value || null; if (token) { callback(token); return; } // Если токен не получен, то вызываем проверку window.smartCaptcha.execute(widgetId); } }; window.CaptchaWidgets.push(widget); return widget; };