Я пытаюсь интегрировать Google reCaptcha v2, невидимый на существующей странице, где обработчик отправки формы уже имеет прикрепленную функцию, которая выполняет проверку на стороне клиента.Если эта функция возвращает true
, форма будет отправлена и перенаправлена на другую страницу.
Моя существующая реализация вынуждает валидатор recaptcha появляться, если он определяет, что вы бот, но сразу после того, как форма все еще отправляетуспешно и перенаправляет на следующую страницу.
Ожидаемый результат: если проверка на стороне клиента пройдет, он должен выполнить recaptcha и отобразить средство проверки recaptcha, если его эвристика считает вас ботом AND запретить отправку формы, пока вы не передадите ее валидатор.
Для справки я тестирую recaptcha с помощью этого метода: https://stackoverflow.com/a/52036368/2684075
Вот реализация
<form
class="elq-form"
onsubmit="return handleFormSubmit(this)"
...
>
...
</form>
...
<div
class="g-recaptcha"
data-sitekey="MY_SITEKEY"
data-callback="recaptchaOnSubmit"
data-size="invisible"
>
</div>
<script src="https://www.google.com/recaptcha/api.js" async="" defer=""></script>
<script>
function recaptchaOnSubmit() {
console.log('recaptcha success');
}
(function() {
var form = document.querySelector('.elq-form');
var originalSubmit = form.onsubmit;
form.onsubmit = null;
form.onsubmit = function() {
var isValid = originalSubmit.call(form);
if (isValid) {
window.grecaptcha.execute();
console.log('grecaptcha executed')
}
return isValid;
}
})()
</script>