因此,我在页面上使用了不可见的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
消息流。
有什么想法吗?
答案 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>
希望这可以帮助某人将头撞到墙上。