reCaptcha错误回调卡在无限循环中

时间:2018-06-20 14:15:36

标签: javascript recaptcha invisible-recaptcha

因此,我在页面上使用了不可见的reCaptcha,并且正在使用error-callback函数向用户报告错误。问题是,每当遇到错误回调时,它都会陷入无限循环中。我通过强制站点密钥不正确来触发“错误”,我不确定这是否相关,但是我需要一种很好的方法来强制Recaptcha击中此回调以进行测试和开发。

这是一个工作的小提琴:https://jsfiddle.net/gbpmd0y5/

这是我用来诊断问题的示例代码:

<div id="cResults"></div>

<script type="text/javascript">
  function submitHandler() {
    var captchaTarget = 'cResults'
    var shareCaptcha = window.grecaptcha.render(captchaTarget, {
      sitekey: 'sitekey',
      size: 'invisible',
      callback: function(token) {},
      'error-callback': function() {
        console.log('error');
        window.grecaptcha.reset(shareCaptcha);
      }
    });
    window.grecaptcha.execute(shareCaptcha);

  }
</script>

<button value="go" onclick="submitHandler()">Go</button>

<script src="https://www.google.com/recaptcha/api.js?" async defer></script>

如果运行此代码,您将看到右下角的Recaptcha框将连续闪烁(如重新加载),并且如果您打开控制台,您将看到无限的error消息流。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

已解决。

问题似乎是我在grecaptcha.reset()内部调用error-callback,这导致错误被一遍又一遍地捕获。

以下是该解决方案的有效工作:https://jsfiddle.net/w6m3caxq/

最后一个有效的代码示例:

<div id="cResults"></div>

<script type="text/javascript">
  function submitHandler() {
    var captchaTarget = 'cResults'
    var shareCaptcha = window.grecaptcha.render(captchaTarget, {
      sitekey: 'sitekey',
      size: 'invisible',
      callback: function(token) {},
      'error-callback': function() {
        console.log('error');
      }
    });
    window.grecaptcha.execute(shareCaptcha);

  }
</script>

<button value="go" onclick="submitHandler()">Go</button>

<script src="https://www.google.com/recaptcha/api.js?" async defer></script>

希望这可以帮助某人将头撞到墙上。