Uncaught ReferenceError: grecaptcha не определен

я использую recaptcha v2

иногда я получаю следующую ошибку (иногда я не получаю ошибку, а иногда я ее получаю)

Uncaught ReferenceError: grecaptcha is not defined

кажется, из-за внутреннего http-запроса. это занимает некоторое время, чтобы получить другой js recaptcha__en.js. Между тем фактический код рендеринга grecaptcha выполняет.

Итак, каково стандартное решение, чтобы избежать этой проблемы.?

PS : конечно, я ищу какое-то решение, кроме setTimeout

4 ответов


Recaptcha имеет onload обратный вызов, который будет выполняться после загрузки recaptcha. Поместите свой код внутри этой функции обратного вызова.

https://developers.google.com/recaptcha/docs/display

<script>
    function onloadCallback() {
        /* Place your recaptcha rendering code here */
    }
</script>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"></script>

Я решил это, заказав скрипт ниже способом

HTML-код

<div id="review_recaptcha"></div>

jQuery

<script type="text/javascript">
      var review_recaptcha_widget;
      var onloadCallback = function() {
        if($('#review_recaptcha').length) {
            review_recaptcha_widget = grecaptcha.render('review_recaptcha', {
              'sitekey' : '<?php echo $site_key?>'
            });
        }
      };      
</script>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>

Вы можете установить hl=en переменная при вызове api, если язык вас беспокоит!

такие как:

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en"></script>

моя проблема была решена путем внесения следующих изменений в код скрипта (:

i.e от внутреннего пути

<script src='static/js/recaptcha/api.js'></script>

к внешнему пути google i.e

<script src='https://www.google.com/recaptcha/api.js'></script>