Recaptcha - Внедрение тега Script периодически не удавалось - PullRequest
5 голосов
/ 20 апреля 2011

У меня есть форма, которая использует reCAPTCHA.По какой-то причине, когда пользователь отправляет эту форму с неправильным значением повторного захвата, при повторной визуализации страницы повторный захват не может отображаться.

Похоже, что это происходит, когда повторный захват пытается ввести "script ", и время от времени (и только в определенных браузерах, определенных средах и в определенных сценариях) не удается добавить этот тег" script "в DOM.

Это происходит так:

1) В форму встроен некоторый встроенный JavaScript, который выглядит следующим образом:

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

2) Этот скрипт выполняется правильно и возвращает следующее:

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)После этого обычно происходит добавление тега сценария на страницу, загрузка файла recaptcha.js и чтение RecaptchaState для вызова recaptcha для получения изображения для рендеринга.

Однаков некоторых случаях, по какой-то причине, тег script, который должен быть добавлен в 2), никогда не добавляется в DOM, поэтому recaptcha.js никогда не загружается, поэтому recaptchaникогда не отображается!Я могу видеть в консоли после отображения страницы, что RecaptchaState существует и имеет правильное значение, просто нет сценария тега, чтобы идти с ним.

Так вот, что происходит, и я действительно озадачен, почему.Я могу воспроизвести это только в Firefox, и, как ни странно, это происходит только при определенных условиях.Например, если я перенаправляю запросы через fiddler, он будет работать каждый раз, никогда не перестанет работать.Если я очищу кеш перед отправкой запроса, он будет работать каждый раз.Иногда, когда я ожидаю, что это не удастся, это работает, и наоборот.Так что это очень спорадично.

Так что я подумал, что, возможно, это как-то связано со временем загрузки js, которое мешает выражению «document.write».Может быть, какой-то другой javascript мешает этому или что-то в этом роде.Просто ищите некоторые общие идеи относительно того, как я мог бы попытаться выяснить это, тесты, которые я могу выполнить, вещи, которые я могу искать, или любые идеи как все на самом деле.

Заранее спасибо

Обновление

Все еще не повезло с этим разобраться.Одна мысль у меня была ... мы не видим сообщений об ошибках в консоли Firebug, которые бы указывали, что что-то идет не так, хотя что-то, очевидно, так.Есть ли какие-либо утилиты, которые мы могли бы использовать, чтобы ближе познакомиться с тем, что в действительности происходит в Firefox?Я думаю о чем-то вроде «Speed-Tracer» для Chrome, который дает вам очень подробный график событий.Единственная проблема в том, что мы не можем воспроизвести его в Chrome.

1 Ответ

4 голосов
/ 06 мая 2011

Как оказалось, мы также включаем некоторые скрипты через службу управления тегами под названием Ensighten .Один из этих сценариев временно использовал функцию «document.write» и изменил ее для вызова другой функции.Тем не менее, они устанавливали метод обратного вызова после некоторых других событий, которые возвращали бы функцию «document.write» в ее обычное состояние.

Однако, если время оценки скрипта произошло именно так, что наш повторjavascript был оценен, когда функция document.write находилась в измененном состоянии ... ей не удалось внедрить нашу последующую повторную копию js на страницу.

При этом кажется, что это можно считать навязчивымобеспечить код для изменения documnet.write таким образом, особенно для стороннего файла js.Поэтому я спросил их, могут ли они избежать этого в своем коде.

...