grecaptcha.execute()在用户质询之前调用data-callback

时间:2017-08-07 11:12:37

标签: javascript recaptcha

我想以编程方式调用不可见的reCaptcha挑战。  根据{{​​3}},我写了以下代码:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>reCaptcha test</title>
    <script>
        function onReCaptchaSubmit(token) {
            alert("reCaptcha challenge response:\n" + token);
        }
    </script>
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
    <style>
        .grecaptcha-badge {
            display: none;
        }
    </style>
</head>

<body>

<a href="javascript:void(0);" onclick="grecaptcha.execute();">Challenge</a>

<div class="g-recaptcha"
     data-sitekey="*******"
     data-callback="onReCaptchaSubmit"
     data-size="invisible">
</div>

</body>
</html>
从HTML链接调用

grecaptcha.execute();以显示reCaptcha challenge弹出窗口。在大多数情况下,它运作良好。但有时,在调用grecaptcha.execute();后,它会回拨onReCaptchaSubmit(),而不会显示reCapcha弹出窗口和用户质询。

我该如何解决?
提前谢谢。

2 个答案:

答案 0 :(得分:1)

由于recaptcha有一个到期时间,你必须等到你的recaptcha会话到期或在grecaptcha.reset()内拨打onRecaptchaSubmit以确保每次用户点击链接时都会出现用户质询:

function onRecaptchaSubmit(token) {
  /* any behavior you want */
  //...
  window.grecaptcha.reset();
}

答案 1 :(得分:0)

您希望每次调用grecaptcha.execute()时都出现不可见的reCaptcha来显示用户挑战,但是这种方式不起作用。以我的经验,只有对您有疑问时,它才显示出挑战。如果Google确定您是人类,它将跳过显示用户质询并继续进行回调。