Добавить виджет SmartCaptcha
Добавить виджет SmartCaptcha расширенным методом
Вы управляете загрузкой виджета через объект window.smartCaptcha. В инструкции для этого используется callback-функция onloadFunction:
-
Подключите JS-скрипт к странице пользователя. Для этого разместите следующий код в любом месте страницы, например, внутри тега
<head>:<script src="https://smartcaptcha.cloud.yandex.ru/captcha.js?render=onload&onload=onloadFunction" defer ></script> -
Добавьте на страницу пустой контейнер, в который будет вставлен виджет:
<div id="<идентификатор_контейнера>"></div>Где
id— произвольный идентификатор. -
Добавьте на страницу код callback-функции:
<script> function onloadFunction() { if (window.smartCaptcha) { const container = document.getElementById('<идентификатор_контейнера>'); const widgetId = window.smartCaptcha.render(container, { sitekey: '<ключ_клиента>', hl: '<язык>', }); } } </script>Где:
<идентификатор_контейнера>— идентификатор, сгенерированный на предыдущем шаге;sitekey— ключ клиентской части;hl— язык виджета и задания.
В код callback-функции стоит добавить проверку существования объекта
window.smartCaptcha, чтобы не вызвать ошибку в случае вызова функции до завершения загрузки JS-скрипта.Примечание
При загрузке виджет меняет высоту контейнера, в котором он находится, на
100px. Это может привести к нежелательному «скачку» верстки на странице из-за изменения высоты. Чтобы избавиться от этого «скачка», вы можете задать до загрузки виджета высоту контейнера100px.<div ... style="height: 100px"></div>
Добавить виджет SmartCaptcha с загрузкой при необходимости
Чтобы добавить виджет и загружать капчу при необходимости, используйте следующий подход:
window.onloadFunction = () => {
if (window.smartCaptcha) {
// Создание капчи
}
}
function handleScriptLoadingError() {
// Обработка ошибок
}
const scriptElement = document.createElement('script');
scriptElement.src = 'https://smartcaptcha.cloud.yandex.ru/captcha.js?render=onload&onload=onloadFunction';
scriptElement.onerror = handleScriptLoadingError;
document.body.appendChild(scriptElement);