2012-05-07 28 views
5

Tengo un formulario web que usa reCAPTCHA para filtrar robots. El formulario tiene una etiqueta <script> que carga el desafío de captcha en un . Si este script no se carga, el desafío de captcha no aparecerá y nadie podrá enviar una publicación.¿Hay alguna forma de detectar si un archivo javascript externo está completamente cargado?

¿Hay alguna manera de que pueda detectar si el script está cargado para poder desactivar esta función desde mi lado?

+0

yo sugeriría que usted utilice http://requirejs.org/, pero creo que se está buscando una solución rápida – wizztjh

Respuesta

6

Adjunte el evento load al elemento script que apunta a reCAPTCHA.

var script = document.createElement("script"); 

script.addEventListener("load", function() { 
    // Script has loaded. 
}); 

script.src = "/path/to/recaptcha.js"; 

document.body.appendChild(script); 
+0

¿Puede explicar su respuesta, por favor? Gracias. –

2

Probablemente puedas encontrar la manera de hacer esa detección, pero no lo recomendaría, ya que se frustra el propósito del captcha. Una computadora/robot podría fácilmente hacer que la secuencia de comandos no se cargue. Una entrada de archivo de hosts haría el truco.

También se puede hacer una secuencia de comandos que simplemente ejecuta su manejo para el caso de carga fallida, eludiendo así su captcha.

+0

¿Puede explicar cómo la elusión funcionaría? Gracias. –

+0

@BenHuh Si tiene un código que le dice a su servidor cuando no se necesita un captcha (porque no se pudo cargar), entonces cualquiera puede escribir un script que simplemente ejecute ese código, ya sea que el captcha se haya cargado o no. Entonces el captcha ya no será necesario y ese usuario podría agregar esa modificación a cualquier bot si quisieran abusar de su formulario. – Paulpro

+0

Oh sí, porque javascript se ejecuta en el lado del cliente, no en el lado del servidor. Estoy de acuerdo contigo. Gracias :) –

1

script.addEventListener no funcionará en IE8 e IE7. para eso se necesita

if (!script.addEventListener) { 
     script.attachEvent("onload", function(){ 
     // script has loaded in IE 7 and 8 as well. 
}); 
    } 
    else 
    { 
    script.addEventListener("load", function() { 
     // Script has loaded. 
    }); 
} 
Cuestiones relacionadas