Recaptcha – L'injection d'étiquette de script échoue sporadiquement

J'ai un formulaire qui utilise reCAPTCHA. Pour une raison quelconque, lorsqu'un utilisateur soumet ce formulaire avec une valeur de récupération incorrecte, lorsque la page est redessinée, la reprise échoue.

Il semble que ce recapture tente d'injecter une balise "script", et sporadiquement (et seulement dans certains navigateurs, certains environnements et dans certains scénarios), il est impossible d'ajouter cette balise "script" au DOM.

Cela se produit comme ceci:

1) Il existe un javascript intégré incorporé dans la forme qui ressemble à ceci:

https://www.google.com/recaptcha/api/challenge?k=<our public key> 

2) Ce script s'exécute correctement et renvoie ce qui suit:

 var RecaptchaState = { site : <some value>, challenge : <challenge key>, is_incorrect : false, programming_error : '', error_message : '', server : 'https://www.google.com/recaptcha/api/', timeout : 18000 }; document.write('<scr'+'ipt type="text/javascript" s'+'rc="' + RecaptchaState.server + 'js/recaptcha.js"></scr'+'ipt>'); 

3) Ce qui se passe généralement après cela, c'est que la balise de script est injectée dans la page, recaptcha.js est chargé, et il va lire RecaptchaState pour faire un appel à recaptcha pour obtenir l'image à rendre.

Cependant, dans certains cas, pour une raison quelconque, la balise de script qui doit être ajoutée en 2) ne semble jamais être ajoutée au DOM, donc recaptcha.js n'est jamais chargé, donc le recaptcha n'est jamais rendu! Je peux voir dans la console après que la page est rendue que le "RecaptchaState" existe et a la valeur correcte, juste aucune étiquette de script pour y aller.

Alors c'est ce qui se passe et je suis vraiment perplexe quant à pourquoi. Je ne peux que reproduire cela dans Firefox, et, curieusement, cela ne se produit que sous certaines conditions. Par exemple, si je roule des requêtes par un violoniste, cela fonctionnera à chaque fois, ne échouera jamais. Si je nettoie mon cache avant de soumettre la demande, cela fonctionnera à chaque fois. Parfois, quand je m'attends à ce qu'il échoue, cela fonctionne, et vice versa. C'est donc très sporadique.

Donc, ma pensée est que peut-être que cela a quelque chose à voir avec le moment du chargement js qui interfère avec l'instruction "document.write". Peut-être que d'autres javascript l'interférent ou quelque chose comme ça. Je cherche juste des idées générales sur la façon dont je pourrais essayer de comprendre cela, les tests que je peux exécuter, les choses que je peux rechercher, ou toute idée comme tout.

Merci d'avance

Mettre à jour

Encore aucune chance de comprendre cela. Je pensais avoir … nous ne voyons aucun message d'erreur dans la console Firebug, ce qui indiquerait que tout ira mal, bien que ce soit évidemment. Y a-t-il des utilités que nous pourrions utiliser pour examiner de plus près exactement ce qui se passe dans Firefox? Je pense à quelque chose comme "Speed-Tracer" pour Chrome, qui vous donne un calendrier très détaillé des événements. Le seul problème ici est que nous ne pouvons pas le reproduire dans Chrome.

Dans l' affirmative, nous incluons également certains scripts via un service de gestion des tags appelé Ensighten . L'un de ces scripts était temporairement hi-jacking la fonction "document.write" et le change pour appeler une autre fonction. Ils étaient cependant en train de définir une méthode de rappel après d'autres événements qui réinitialisaient la fonction "document.write" à son état habituel.

Cependant, si le moment de l'évaluation du script s'est produit juste pour que notre recaptcha javascript ait été évalué alors que la fonction document.write était dans son état altéré … il ne manquait pas d'injecter nos récaptcha js ultérieurs sur la page.

Cela dit, il semble que cela pourrait être considéré comme intrusif du code ensailen pour modifier documnet.write de telle manière, en particulier pour un fichier js tiers. Je leur ai donc demandé si, de toute façon, ils pouvaient éviter de le faire dans leur code.