解决后删除Recaptcha v2有问题

时间:2017-08-09 09:54:15

标签: javascript recaptcha

我将Google Recaptcha v2问题添加到骨干视图中,如下所示:

// this is the callback function
var getRecaptchaResponse = function (response) {
    if (response) {
        thisView.captchaResponse = response;
        thisView.canShowContinue();
    } else {
        alert("Captcha response was incorrect");
    }
};

// render the recaptcha
var renderCaptcha = function () {
    thisView.captchaWidgetId = grecaptcha.render('recaptcha-container', {
        sitekey: GlobalSettings.recaptchaKey,
        callback: getRecaptchaResponse,
        size: 'compact'
    });
};

// map the internal function to the window
// so that the callback registered in the 
// link below can be called by JSONP.
window.renderCaptcha = renderCaptcha;

// load the script
$.getScript('https://www.google.com/recaptcha/api.js?onload=renderCaptcha&render=explicit', function () { });

成功解决验证码后,我想将其从用户界面中删除,因此我只需删除div容器:

// if the user has solved the captcha yet, don't continue
if (!thisView.captchaResponse) {
    return;
}

// remove recpatcha
$('#recaptcha-container').remove();

Google似乎没有提供API method来正确销毁grecaptcha小部件。这是一个问题吗?建议的方法是什么?

以上删除的容器可在Chrome中使用,但不适用于IE11。在IE11中,验证码挑战仍然可见。

1 个答案:

答案 0 :(得分:2)

根据reCAPTCHA的常见问题解答,似乎在删除容器后,您应该使用grecaptcha.reset(id)重置验证码对象

https://developers.google.com/recaptcha/docs/faq

  

我收到了未被捕获的SecurityError:阻止了一个包含原点的帧   " https://www.google.com"从访问带有起源的框架""。我该怎么办?

     

如果reCAPTCHA小部件HTML元素是,则通常会发生这种情况   在最终用户点击之后的某个时间以编程方式删除   复选框。我们建议使用grecaptcha.reset()javascript   用于重置reCAPTCHA小部件的功能。