未捕获的ReferenceError:未定义grecaptcha

时间:2015-04-23 11:50:33

标签: javascript recaptcha

我正在使用recaptcha v2

我偶尔会收到以下错误(有时我不会收到错误,有时候我会收到错误)

Uncaught ReferenceError: grecaptcha is not defined

似乎是因为内部的http请求。需要一些时间来获得另一个js recaptcha__en.js。同时grecaptcha的实际渲染代码执行。

那么避免这个问题的标准解决方案是什么?

PS:当然我正在寻找除setTimeout

之外的其他解决方案

7 个答案:

答案 0 :(得分:18)

Recaptcha有一个onload回调,一旦加载了recaptcha就会运行。将代码放在该回调函数中。

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>

答案 1 :(得分:4)

我已通过以下方式订购脚本解决了这个问题

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 :(得分:0)

如果语言对你有用,你可以在调用api时设置In [9]: x Out[9]: array([[ 0.62047293, 0.02957529, 0.88920602, 0.57581068], [ 0.40903378, 0.80748886, 0.83018903, 0.22445871], [ 0.87296866, 0.94234112, 0.70001789, 0.99333763], [ 0.96689113, 0.35128491, 0.35775966, 0.26734985]]) In [10]: [" ".join(item) for item in x.astype('S4')] Out[10]: ['0.62 0.02 0.88 0.57', '0.40 0.80 0.83 0.22', '0.87 0.94 0.70 0.99', '0.96 0.35 0.35 0.26'] In [11]: [" ".join(item) for item in x.astype('S14')] Out[11]: ['0.620472934011 0.029575285327 0.889206021736 0.575810682998', '0.409033783485 0.807488858152 0.830189034897 0.224458707937', '0.872968659668 0.942341118836 0.700017893576 0.993337626766', '0.966891127767 0.351284905075 0.357759658063 0.267349854182'] 变量!

因此:

hl=en

答案 3 :(得分:0)

我的问题通过在脚本代码中进行以下更改得到解决(:

即从内部路径

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

到外部谷歌路径,即

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

答案 4 :(得分:0)

有时刷新后,应用程序将脚本'https://www.google.com/recaptcha/api.js加载几次,请确保您的应用程序没有多个<script async="" defer="" src="https://www.google.com/recaptcha/api.js"></script>

答案 5 :(得分:0)

它可以在登录页面上运行,并且也可以使用bootstrap 4弹出窗口形式:

<script src="https://www.google.com/recaptcha/api.js?render=ADD-YOUR-RECAPTCHA-SITE-KEY-HERE"></script>
<script>
var interval = setInterval(function(){
  if(window.grecaptcha){
        grecaptcha.ready(function() {
            grecaptcha.execute('ADD-YOUR-RECAPTCHA-SITE-KEY-HERE', {action: 'homepage'}).then(function(token) {
              $('#i-recaptcha').prepend('<input type="hidden" name="g-recaptcha-response" value="' + token + '">');
            });
        });
    clearInterval(interval);
  }
}, 100);
</script>

感谢您提出这个问题。 :)

答案 6 :(得分:0)

我知道这是一个老问题,但这也许会对某人有所帮助。我收到此“未捕获的ReferenceError:未定义grecaptcha”错误的原因是,因为我无法访问www.gstatic.com上托管的依赖项js文件(recaptcha_en.js)。解决了这个问题后,它对我有用。