web-dev-qa-db-fra.com

Uncaught ReferenceError: grecaptcha n'est pas défini

J'utilise recaptcha v2

J'obtiens parfois l'erreur suivante (parfois je ne reçois pas d'erreur et parfois je l'obtiens)

Uncaught ReferenceError: grecaptcha is not defined

Il semble en raison de la demande http interne. cela prend un peu de temps pour obtenir un autre js recaptcha__en.js. Pendant ce temps, le code de rendu actuel de grecaptcha est exécuté.

Alors, quelle est la solution standard pour éviter ce problème?

PS: bien sûr, je cherche une solution autre que setTimeout

17
codeofnode

Recaptcha a un callback onload qui sera exécuté une fois Recaptcha chargé. Placez votre code dans cette fonction de rappel.

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>
17

J'ai résolu ce problème en commandant le script de la manière suivante

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>
2
diEcho

Vous pouvez définir la variable hl=en lors de l'appel de l'API si la langue vous concerne!

en tant que tel:

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

Mon problème a été résolu en apportant les modifications suivantes au code de script (: 

c'est-à-dire depuis le chemin interne 

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

vers le chemin google externe i.e 

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

0
Walk