2010-02-06 15 views
1

J'ai intégré Recaptcha avec dJango. dJango Snippet - Recaptchadjango: recaptcha: Erreur dans Firefox fonctionne dans IE & chrome: erreur RecaptchaState

La vue qui montre la page est - de baseapp.recaptcha importation captcha

def showHome(request):  
    if(request.user.is_authenticated()):  
     tempEmail = request.session.get('id')  
     return render_to_response('logreg/login-register.html', {'emailFromForm':tempEmail}, context_instance=RequestContext(request));  
    else:  
     request.session.set_test_cookie()  
     form = RegistrationForm()  
     loginForm = LoginForm()  
     html_captcha = captcha.displayhtml(settings.RECAPTCHA_PUB_KEY)  
     print "Captcha HTML is : %s" % html_captcha  
     return render_to_response('logreg/login-register.html', {'form': form, 'loginForm':loginForm, 'html_captcha':html_captcha}) ` 

Voici le code html -

<div id="register-dialog" title="Register yourself">  
    <p id="validateTips">All form fields are required.</p>  
    {% if error %}  
    {{ error }}  
    {% endif %}  
    <form name="registrationForm" action="registerUser/" method="post">  
     {{ form.as_p }}  
     {{ html_captcha }}  
    </form>  
</div> 

Il fonctionne très bien dans IE & Chrome , mais firefox me montre une exception à la ligne 451 dans recaptcha. Voici le code à cette ligne var $ST = RecaptchaState;

Toutes les pensées sont appréciées!

Remarque: Firefox version - 3.6; IE - 8; Chrome - 4.0

+0

pouvez-vous poster le code HTML/JavaScript généré? c'est ce que Firefox lance l'erreur. – scunliffe

+0

De firebug, il a montré qu'il n'y avait pas d'autre code généré. Cela m'a conduit directement à cette ligne dans recaptcha.js. C'était un peu déroutant. Je ne sais pas dans quelle séquence FF charge le code, et le téléchargement de js avant toute autre chose est un problème. Je spécule juste. – PlanetUnknown

Répondre

0

Voici comment je l'ai résolu. J'ai pensé que mon captcha est montré dans le dialogue de jqueryui et peut-être que c'est le problème avec FF. (Pourquoi? Je ne sais pas.) Par conséquent, au lieu de mettre statiquement le texte à partir de django ou de l'écrire. J'ai utilisé le ajax api et inséré le recaptcha sur l'événement open dans la boîte de dialogue.

Voici l'exemple de code, au cas où quelqu'un trébucherait sur le même problème.

code

est presque similaire à ce qui est sur la reCaptcha api site

$("#register-dialog").dialog({  
    buttons:{ 
    },  
    open: function() { 
    Recaptcha.create("41x39....", 
     "recaptcha_div", { 
     theme: "red", 
     callback: Recaptcha.focus_response_field 
     }); 

Et a changé la balise de formulaire pour être si -

<form name="registrationForm" action="registerUser/" method="post">  
    {{ form.as_p }}  
    <div id="recaptcha_div"></div>  
</form> 

Et oui, inclus les ajax.js -

<script type="text/javascript" src="http://api.recaptcha.net/js/recaptcha_ajax.js"> 
    </script>