J'utilise recaptcha
v2
Je reçois de temps en temps 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 requête HTTP interne. Cela prend du temps pour obtenir un autre js recaptcha__en.js
. Pendant ce temps, le code de rendu réel de grecaptcha
s'exécute.
Alors, quelle est la solution standard pour éviter ce problème?
PS: bien sûr, je suis à la recherche d'une solution autre que setTimeout
Recaptcha dispose d'un rappel de recharge qui fonctionnera une fois que recaptcha est 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>
J'ai résolu cela en commandant le script en dessous
<div id="review_recaptcha"></div>
<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>
Vous pouvez définir la variable hl=en
lorsque vous appelez l'api si la langue vous intéresse!
En tant que tel:
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en"></script>
Mon problème a été résolu en effectuant les modifications suivantes dans le code du script (:
C'est-à-dire du chemin interne
<script src='static/js/recaptcha/api.js'></script>
À un chemin Google google externe
<script src='https://www.google.com/recaptcha/api.js'></script>