我无法在我的ajax联系表单中集成reCaptcha.只有在用户完成挑战后的前2分钟才有效. ReCaptcha在2分钟后过期.问题是小部件是完整的,没有像“会话过期.再次完成挑战”.用户无法执行任何操作,但会重新加载页面.此外,不调用过期回调(显然,因为小部件不会过期).
我可以在完成后设置一个计时器2分钟来重置小部件.这可行,但它有点hacky,如果谷歌选择改变未来的到期时间.任何想法为什么它不会过期?
编辑:
这是代码,我做了一个小例子html文件并证明它不起作用.
<html> <head></head> <body> <div id="google-recaptcha-widget"></div> <script> var expiredCallback = function() { alert('expired!'); } var recaptchaLoad = function() { grecaptcha.render('google-recaptcha-widget',{ 'sitekey' : 'mysitekey' 'expired-callback': expiredCallback }); } </script> <script src="https://www.google.com/recaptcha/api.js?onload=recaptchaLoad&render=explicit" async defer></script> </body></html>
解决方法
<div id="google-recaptcha-widget" class="g-recaptcha" data-sitekey="mySiteKey" data-callback="myCallbackMethod" data-expired-callback="expiredCallback"></div> <script> function myCallbackMethod() { // save the world } function expiredCallback() { // Uh oh,reCAPTCHA expired,hack the world } </script>