2012-05-07 15 views
5

Mam formularz internetowy, który używa reCAPTCHA do odfiltrowywania robotów. Formularz ma znacznik <script>, który ładuje wyzwanie captcha w postaci . Jeśli ten skrypt nie zostanie załadowany, to wyzwanie captcha nie pojawi się i nikt nie będzie mógł wysłać postu.Czy istnieje sposób wykrywania, czy zewnętrzny plik javascript jest w pełni załadowany?

Czy jest jakiś sposób, aby wykryć, czy skrypt został załadowany, aby wyłączyć tę funkcję z mojej strony?

+0

i sugeruje możliwość korzystania http://requirejs.org/, ale myślę, że szukasz szybkiego rozwiązania – wizztjh

Odpowiedz

6

Dołącz zdarzenie load do elementu script, który wskazuje na reCAPTCHA.

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

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

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

document.body.appendChild(script); 
+0

Czy możesz opracować na odpowiedź proszę. Dzięki. –

2

Prawdopodobnie mógłbyś znaleźć sposób na wykrycie, ale nie poleciłbym tego, ponieważ to psuje cel captcha. Komputer/robot może łatwo spowodować, że skrypt nie zostanie załadowany. Wpis pliku hosts może załatwić sprawę.

Można również utworzyć skrypt, który po prostu wykonuje operację, aby nie załadować sprawy, a tym samym omijać captcha.

+0

można wypracowania jak obejście będzie działać? Dzięki. –

+0

@BenHuh Jeśli masz kod, który mówi serwerowi, gdy captcha nie jest potrzebny (ponieważ nie udało się załadować), to każdy może napisać skrypt, który po prostu wykonuje ten kod, niezależnie od tego, czy załadowano captcha. Wtedy captcha nie będzie już potrzebny, a użytkownik może dodać tę modyfikację do dowolnego bota, jeśli chce nadużywać swojego formularza. – Paulpro

+0

O tak, ponieważ javascript jest wykonywany po stronie klienta, a nie po stronie serwera. Zgadzam się z Tobą. Dzięki :) –

1

script.addEventListener nie będzie działać na IE8 i IE7. za które trzeba

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. 
    }); 
} 
Powiązane problemy