2010-07-21 5 views
3

Ceci est un problème vraiment étrange, j'essaie d'utiliser le Recaptcha sur l'un des site, et il fonctionne pour tous les navigateurs testés sauf pour IE6.IE6 ne pas analyser le fichier JavaScript chargé (Recaptcha hébergé par Google)

J'ai fait une référence aux js de Google: http://www.google.com/recaptcha/api/challenge?k=the_key et il est chargé selon Fiddler2 & l'événement « onreadystatechange » (qui ont une readystate == « chargés »)

Le flux de travail normal devrait être le JS chargé a été analysé, et un autre a été demandé, puis l'image chargée à partir de google. mon problème est que le premier fichier JS chargé (contenu similaire à ci-dessous):

var RecaptchaState = { 
    site : 'xxxxxxxxxxxx', 
    challenge : 'xxxxxxxxxxxxxxxxxxxxxxxxx', 
    is_incorrect : false, 
    programming_error : '', 
    error_message : '', 
    server : 'http://www.google.com/recaptcha/api/', 
    timeout : 18000 
}; 

document.write('<scr'+'ipt type="text/javascript" s'+'rc="' + RecaptchaState.server + 'js/recaptcha.js"></scr'+'ipt>'); 

ne sont pas analysées. Tout d'abord, le test JS suivant:

typeof RecaptchaState == 'undefined' 

En second lieu, il n'y a pas de deuxième demande de script (selon Fiddler2), pour ne pas dire l'image recaptcha ...

La balise script est placé à l'intérieur du corps, après Markups de ReCaptcha, et je l'ai même essayé de charger le JS dynamique:

function GetJavaScript(url, callback) { 
    var script = document.createElement('script'); 
    script.src = url; 
    var head = document.getElementsByTagName('head')[0]; 
    var done = false; 

    // Attach handlers for all browsers 
    script.onload = script.onreadystatechange = function() { 
     if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) { 
      done = true; 
      callback(); 

      // remove the hanlder 
      script.onload = script.onreadystatechange = null; 
      head.removeChild(script); 
     } 
    }; 

    head.appendChild(script); 
} 

qui donne même comportement ... ce qui me confond plus est: ce problème se produit de temps en temps que lorsque la page est redirectly d'une autre page . (Ouvrir directement l'URL dans une nouvelle fenêtre du navigateur ou rafraîchir la page fonctionne toujours bien, mais rafraîchir la page en utilisant JavaScript ne fonctionne pas ...)

S'il vous plaît aider, des conseils et/ou une idée serait appréciée ...

Répondre

0

Ce n'est pas une solution, juste une solution de contournement.

Demander au premier fichier js: http://www.google.com/recaptcha/api/challenge?k=the_key sur le site du serveur, et injecter la première partie du script sur la page directement:

var RecaptchaState = { 
    site : 'xxxxxxxxxxxx', 
    challenge : 'xxxxxxxxxxxxxxxxxxxxxxxxx', 
    is_incorrect : false, 
    programming_error : '', 
    error_message : '', 
    server : 'http://www.google.com/recaptcha/api/', 
    timeout : 18000 
}; 

Puis, en utilisant la fonction GetJavaScript et/ou JQuery.getScript () fonction pour charger le second script: http://www.google.com/recaptcha/api/js/recaptcha.js

Cette solution fonctionne pour IE6 en fonction de mon test, et de rendre le serveur moins de charge, je détecte le navigateur de l'utilisateur à la fin du serveur, ainsi que la fin de client pour injecter une logique différente.

Je sais que c'est une solution de contournement, juste au cas où cela pourrait aider quelqu'un.

-1

PAS DE REPONSE (ou est-ce?): Fo_Ok ie6. Sérieusement, oublie ça. Sans cette attitude, ie6 vivra pour toujours. C'est comme un ancien esprit mauvais qui sera vivant jusqu'à ce que quelqu'un y croit.

+0

Microsoft ne disait-il pas déjà que IE6 est un tas obsolète de failles de sécurité de virus-aimant, chaque copie utilisée endommage probablement Internet, et tout le monde a sérieusement besoin de l'enlever de leurs machines? Pas dans ces mots précis, bien sûr, mais ... Je pense que quelqu'un a même suggéré que les FSI responsables interdisent les utilisateurs d'IE6 pour des raisons d'irresponsabilité et de neglegence. – Steve314

+0

Oui, ils ont dit quelque chose comme ça. Cependant, comme vous le voyez, certains développeurs web qui travaillent dur le prennent en compte. – foret

+1

Si je pouvais vivre sans se soucier de IE6, la vie serait beaucoup mieux. Cependant, tant que le client l'utilise toujours, je dois le faire fonctionner. Leader envisage d'utiliser une bibliothèque tierce pour générer la chose captcha. :( – ccppjava

1

Vérifiez bien que le src de votre script dans la source de la page n'est pas api.recaptcha.net (certaines bibliothèques l'utilisent, je sais que celle de Java que j'ai utilisée l'a fait). Si tel est le cas, cela est redirigé vers www.google.com/recaptcha/api et cela semble poser des problèmes avec IE6. Une fois que je suis passé à l'utilisation de www.google.com/recaptcha/api comme script src, IE6 était complètement satisfait. Bonne chance!

+0

merci pour votre suggestion, va essayer dans le prochain projet (si besoin recaptcha) – ccppjava

1

J'ai résolu ce problème en utilisant l'appel https, comme this thread dans le groupe Google de reCaptcha.

Questions connexes