谷歌REcaptcha没有显示

Fan*_*ane 14 javascript recaptcha

我有以下内容 <body>

<div class="g-recaptcha" data-sitekey="some-key (original is right)">
Run Code Online (Sandbox Code Playgroud)

这是我的 <head>

<script src="//www.google.com/recaptcha/api.js"></script>
Run Code Online (Sandbox Code Playgroud)

但无论是在firefox还是chrome上都没有显示......这是一个已知的问题吗?

And*_*rei 6

确保这<script src="//www.google.com/recaptcha/api.js"></script>是关闭head标签之前的最后一件事.这对我来说解决了同样的问题


Sha*_*ard 6

刚遇到这个障碍,就我而言,这是由于 AngularJS。它不仅限于 Angular,任何在页面加载后绑定元素的库都可能导致 Google reCAPTCHA 不显示,因为在执行 Google 的代码时该元素不存在。

要解决此问题,请首先使渲染显式并在 reCAPTCHA 加载时提供要执行的函数:

<script src='https://www.google.com/recaptcha/api.js?onload=recaptchaOnload&render=explicit' async defer></script>
Run Code Online (Sandbox Code Playgroud)

现在,为容器添加一个唯一的 ID,例如

<div id="recaptcha" class="g-recaptcha" data-sitekey="site key here"></div>
Run Code Online (Sandbox Code Playgroud)

然后在自定义函数中等待元素实际存在:

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);
}
Run Code Online (Sandbox Code Playgroud)

这将持续尝试 10 秒,直到找到该元素,然后将 reCAPTCHA 渲染到其中。


小智 -4

改变:

<script src="//www.google.com/recaptcha/api.js"></script>
Run Code Online (Sandbox Code Playgroud)

到:

<script src="https://www.google.com/recaptcha/api.js" async defer></script>
Run Code Online (Sandbox Code Playgroud)

我不知道这是否只是一个错字,如果不是,添加https:肯定会解决您的问题。