reCAPTCHA会话到期时触发事件

时间:2015-02-26 09:42:11

标签: jquery recaptcha

我正在使用谷歌reCAPTCHA。它工作正常但是当reCAPTCHA会话在一定时间后到期并且用户再次单击复选框以填充reCAPTCHA时,谷歌会显示警告说Error: invalid load parameters.此后没有任何工作,直到用户重新加载页面。

包含div消息的session expired块具有类rc-anchor-expired-msg。我尝试div show事件使用此类在会话到期后立即触发事件并尝试重置recaptcha。但这也不起作用。

是否有回调函数或某些东西,我可以在会话到期时重置recaptcha。

1 个答案:

答案 0 :(得分:23)

渲染reCAPTCHA时可以传递一个expired-callback参数,然后可以调用grecaptcha.reset()方法。

例如:

把它放在标题中。

<script>
   var callback = function() {
      grecaptcha.render('id-of-render-element', {
         'sitekey': 'your-site-key',
         'expired-callback': expCallback
       });
   };
   var expCallback = function() {
      grecaptcha.reset();
   };
</script>

将它放在将用于渲染reCAPTCHA的元素之后。

<div id="id-of-render-element"></div>
<script src="https://www.google.com/recaptcha/api.js?onload=callback&render=explicit" async defer></script>

每次会话到期时,都会重置reCAPTCHA。摆脱了Error: invalid load parameters.警报窗口的问题。

如果它需要解释它是如何工作的,当加载api时,它会从头文件标签中调用callback函数。此函数呈现reCAPTCHA并将expired-callback声明为expCallback函数,该函数仅将reCAPTCHA重置为其原始状态。

你应该能够在自动呈现reCAPTCHA时使用data-expired-callback作为标记属性(而不是像上面那样明确地呈现它),但是当我以这种方式尝试时,回调对我来说不起作用