Gerade dieses Hindernis getroffen, und in meinem Fall war es zu AngularJS fällig. Es ist nicht auf Angular beschränkt. Eine Bibliothek, die die Elemente nach dem Laden der Seite bindet, kann dazu führen, dass Google reCAPTCHA nicht angezeigt wird, da das Element zum Zeitpunkt der Ausführung des Google-Codes noch nicht existiert.
Um dies zu lösen, zuerst die expliziten machen machen und eine Funktion auszuführen liefern, wenn die Lasten reCAPTCHA:
<script src='https://www.google.com/recaptcha/api.js?onload=recaptchaOnload&render=explicit' async defer></script>
nun eine eindeutige ID zu dem Behälter hinzuzufügen, zum Beispiel
<div id="recaptcha" class="g-recaptcha" data-sitekey="site key here"></div>
dann in der benutzerdefinierten Funktion für das Element warten, bis tatsächlich existiert:
var _captchaTries = 0;
function recaptchaOnload() {
_captchaTries++;
if (_captchaTries > 9)
return;
if ($('.g-recaptcha').length > 0) {
grecaptcha.render("recaptcha", {
sitekey: 'site key here',
callback: function() {
console.log('recaptcha callback');
}
});
return;
}
window.setTimeout(recaptchaOnload, 1000);
}
Dies wird 10 Sekunden lang immer wieder versuchen, bis es das Element findet, dann macht die reCAPTCHA hinein.
Gibt es Skriptfehler in der Konsole? – Ravimallya