2017-08-09 5 views
1

J'ajoute Google Recaptcha v2 problématiquement à une vue épine dorsale comme ceci:Retrait Recaptcha v2 problématiquement après avoir été résolu

// 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() { }); 

Une fois que le Captcha est résolu avec succès, je veux le supprimer de l'interface utilisateur, donc je « m enlever simplement le conteneur div:

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

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

Il ne semble pas être un API method que Google a offert de détruire le widget grecaptcha correctement cependant. Est-ce un problème? Quelle est la manière recommandée de faire cela?

La suppression ci-dessus du conteneur fonctionne dans Chrome, mais pas dans IE11. Dans IE11, le défi captcha reste visible.

+0

Vouliez-vous dire par programme? – Ezenhis

+0

@Ezenhis exactement. Je cherche à faire 'grecaptcha.remove ('recaptcha-container'), ou quelque chose de similaire. – Junto

Répondre

1

Selon la FAQ de reCAPTCHA, il semble que après avoir enlevé le conteneur, vous devez réinitialiser l'objet captcha à l'aide grecaptcha.reset(id)

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

I'm getting an uncaught SecurityError: blocked a frame with origin " https://www.google.com " from accessing a frame with origin "". What should I do?

This typically occurs if the reCAPTCHA widget HTML element is programmatically removed sometime after the end user clicks on the checkbox. We recommend using the grecaptcha.reset() javascript function to reset the reCAPTCHA widget.

+0

Je n'obtenais aucune erreur, mais cela résout maintenant le problème. Après avoir supprimé le conteneur et appelé reset(), l'écran de vérification disparaît. Je vous remercie. – Junto

+0

Je sais, je voulais juste garder le contexte de "cela se produit généralement [...]" dans la citation;) Heureux que cela aide :) – Ezenhis

+0

J'ai remarqué que dans Chrome, la réinitialisation n'est pas nécessaire, et jette plutôt Erreur Javascript, mais dans IE est requis. J'ai donc un contrôle maintenant pour voir si c'est IE, et seulement lancer cette réinitialisation si c'est le cas. – Junto