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
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>
J'ai résolu ce problème en commandant le script de la manière suivante
<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
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>
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>