IE6 не анализирует загруженный файл JavaScript (Recaptcha, размещенный в Google) - PullRequest
3 голосов
/ 21 июля 2010

Это действительно странная проблема, я пытаюсь использовать Recaptcha на одном из веб-сайтов, и она работает для всех протестированных браузеров, кроме IE6.

Я сделал ссылку на Google's JS: http://www.google.com/recaptcha/api/challenge?k=the_key и он загружается в соответствии с fiddler2 и событием 'onreadystatechange' (которые имеют readystate == 'загружен')

Нормальный рабочий процесс должен быть проанализирован загруженный JS, и было запрошено другое js, затем изображение, загруженное из Google. Моя проблема в том, что первый загруженный файл JS (содержимое, аналогичное приведенному ниже):

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>');

не анализируется. Во-первых, следующий тест JS:

 typeof RecaptchaState == 'undefined'

Во-вторых, нет второго запроса скрипта (согласно fiddler2), не говоря уже об образе recaptcha ...

Тег script ставится внутри тела после разметки recaptcha, и я даже пытался загрузить JS динамически:

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);
}

, который дает такое же поведение ... что меня больше всего смущает, так это: эта проблема возникает иногда, только если страница перенаправлена ​​с другой страницы. (открыть URL-адрес непосредственно в новом окне браузера или обновить страницу всегда работает нормально, однако обновление страницы с использованием JavaScript не работает ...)

Пожалуйста, помогите, любые советы и / или идеи будут оценены ...

Ответы [ 4 ]

1 голос
/ 09 июня 2011

Я решил эту проблему, используя вызов https, согласно этой теме в группе Google reCaptcha.

1 голос
/ 30 октября 2010

Дважды проверьте, что src вашего скрипта в исходном коде страницы не api.recaptcha.net (некоторые библиотеки используют это, я знаю, что я использовал Java).Если это так, он пересылается на сайт www.google.com/recaptcha/api, и это, похоже, вызывает проблемы с IE6.Как только я переключился на использование www.google.com/recaptcha/api в качестве исходного скрипта, IE6 был полностью доволен.Удачи!

0 голосов
/ 21 июля 2010

Это не решение, а просто обходной путь.

Запросите первый файл js: http://www.google.com/recaptcha/api/challenge?k=the_key на сайте сервера и вставьте первую часть сценария непосредственно на страницу:

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

Затем, используя функцию GetJavaScript и / или функцию JQuery.getScript () для загрузки второго скрипта: http://www.google.com/recaptcha/api/js/recaptcha.js

Это решение работает для IE6 на основе моего теста, и длячтобы сделать сервер менее загруженным, я обнаруживаю, что браузер пользователя на стороне сервера, а также на стороне клиента вводит другую логику.

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

0 голосов
/ 21 июля 2010

НЕ ОТВЕТ (или это?): Fo_Ok ie6. Серьезно, забудь об этом. Без этого отношения ie6 будет жить вечно. Это как древний злой дух, который будет жив, пока кто-нибудь не поверит в это.

...