2010-07-21 3 views
3

Это действительно странная проблема, я пытаюсь использовать Recaptcha на одном из веб-сайтов и работает для всех проверенных браузеров, кроме IE6.IE6 не анализирует загруженный файл JavaScript (Recaptcha, размещенный Google)

Я сделал ссылку на JS в Google: 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 изображение ...

Тег сценария помещается внутри тела, после 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); 
} 

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

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

ответ

0

Это не решение, просто обходное решение.

Запрос первым 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 на основе моего теста, и сделать сервер меньшую нагрузку, я обнаружить браузер пользователя на стороне сервера, а также конец клиента, чтобы придать другую логику.

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

-1

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

+0

Разве сама Microsoft не сказала, что IE6 - это устаревшая куча недостатков защиты от вирусов и магнитов, каждая используемая копия, вероятно, повредит Интернет, и всем серьезно нужно избавиться от их машин? Не в этих точных словах, конечно, но ... Я думаю, кто-то даже предположил, что ответственные интернет-провайдеры должны запрещать пользователям IE6 на основании безответственности и небрежности. – Steve314

+0

Да, они сказали что-то вроде этого. Однако, как вы видите, некоторые трудолюбивые веб-разработчики все еще учитывают это. – foret

+1

Если бы я мог жить без заботы об IE6, жизнь была бы намного лучше. Однако, пока клиент все еще использует его, я должен заставить его работать. Лидер рассматривает возможность использования сторонней библиотеки для создания самой вещи. :( – ccppjava

1

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

+0

благодарю вас за ваше предложение, попробую в следующем проекте (при необходимости recaptcha) – ccppjava

1

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

Смежные вопросы