2010-07-30 15 views
128

Tengo un formulario de registro con AJAX para poder actualizar la imagen de Recaptcha cada vez que se produce un error (es decir, el nombre de usuario ya está en uso).Cómo recargar ReCaptcha usando JavaScript?

Estoy buscando un código compatible con ReCaptcha para volver a cargarlo mediante JavaScript.

+1

no se moleste. ¿Por qué cambiar el CAPTCHA si se toma el nombre de usuario? – SLaks

+14

* @ SLaks *: probablemente porque primero comprueba el captcha y luego verifica al usuario, y una vez que se utiliza el captcha, ya no es válido. Hacer esto al revés, el usuario malintencionado puede fallar fácilmente el servidor y obtener la lista de todos los usuarios que usan la fuerza bruta sin molestarse con el captcha. –

+0

@TomaszNurkiewicz ACTUALIZACIÓN: el usuario malintencionado no podrá enviar el mismo re-captcha para la validación más de una vez. Entonces, no, la fuerza bruta no es posible aquí.El motivo para refrescar el captcha es simplemente permitirle al usuario ingresarlo nuevamente. –

Respuesta

279

Creo que ahora puedo responder mi propia pregunta. Es

Recaptcha.reload(); 

en JavaScript si hay un Reconocer texto ya cargado en la ventana.


Editar: @SebiH actualizados que este comando es ahora:

grecaptcha.reset(); 
+16

Esta respuesta es casi demasiado simple. – Lazlo

+17

Para cualquier persona que use el nuevo reCAPTCHA: La línea ahora ha cambiado a 'grecaptcha.reset();' ([documentación] (https://developers.google.com/recaptcha/docs/display#config)) – SebiH

+4

@SebiH actualizado . –

5

probar este

<script type="text/javascript" src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script> 
<script type="text/javascript"> 
      function showRecaptcha() { 
      Recaptcha.create("YOURPUBLICKEY", 'captchadiv', { 
       theme: 'red', 
       callback: Recaptcha.focus_response_field 
      }); 
      } 
</script> 

<div id="captchadiv"></div> 

Si CALLL showRecaptcha la captchadiv se rellenará con una nueva instancia Reconocer texto.

+0

No tengo tal div. Mi código es así: http://pastebin.com/xZ3RGeED –

+0

puede cambiar su código y llamar a showRecaptcha onload? ¿Esto te está ayudando? – Tim

7

O usted podría simular un clic en el botón de actualización

// If recaptcha object exists, refresh it 
    if (typeof Recaptcha != "undefined") { 
     jQuery('#recaptcha_reload').click(); 
    } 
+1

Por alguna razón, 'Recaptcha' y' grecaptcha' no están definidos en mi página. Esto funcionó para mí, con una ligera modificación: 'if ($ (" # recaptcha_reload "). Length> 0) {....' –

+0

Lo usé para saber cuándo finalizó la iteración de una matriz sin contar sus elementos. – erm3nda

44

Si está utilizando la versión 1

Recaptcha.reload(); 

Si está utilizando la versión 2

grecaptcha.reset(); 
+1

esto me ayuda, gracias :) – aimhaj

0

si está utilizando un nuevo uso Reconocer texto 2.0: de código subyacente:

ScriptManager.RegisterStartupScript(this, this.GetType(), "CaptchaReload", "$.getScript(\"https://www.google.com/recaptcha/api.js\", function() {});", true); 

de JavaScript simple

<script>$.getScript(\"https://www.google.com/recaptcha/api.js\", function() {});</script> 
6
grecaptcha.reset(opt_widget_id) 

Restablece el widget reCAPTCHA. Se puede pasar una identificación de widget opcional; de lo contrario, la función restablece el primer widget creado. (from Google's web page)

+0

No estoy seguro de por qué esto no fue aceptado. –

+0

solo restableció el primer captcha en la página –

+0

@ Maxwells.c ¿Leyó la publicación? Opcionalmente, puede pasar una identificación de widget y eliminar el n-ésimo widget. Si no pasa, entonces se restablece el primero. – Kutalia

3

Para los usuarios AngularJS:

$window.grecaptcha.reset(); 
+0

En mi caso sin $ - window.grecaptcha.reset(); –