Я решил это на своем сайте, переключившись на явный рендеринг:
<script src="https://www.google.com/recaptcha/api.js?onload=recaptchaOnLoad&render=explicit" async defer></script>
...
<div id="recaptcha"></div>
Я использую recaptchaOnLoad
для сброса глобальной переменной recaptcha_rendered
,потому что мое резюме находится на второй странице мастера jQuery Steps , который, как мне кажется, сбивает с толку автоматический рендеринг.Мне, вероятно, не нужна эта функция (на которую также ссылается тег script
, используемый для загрузки API recaptcha выше), но она не приносит никакого вреда:
function recaptchaOnLoad() {
recaptcha_rendered = false;
}
Когда мастер переключается настраницу, содержащую recaptcha, я сбрасываю или отображаю с помощью:
if( recaptcha_rendered ) {
grecaptcha.reset();
} else {
grecaptcha.render( 'recaptcha', {
'sitekey': 'my-site-key',
'callback': 'recaptchaOnData',
'expired-callback': 'recaptchaOnExpiry'
} );
recaptcha_rendered = true;
}
Теперь он работает каждый раз.