3

这是一个非常奇怪的问题,我正在尝试在其中一个网站上使用 Recaptcha,它适用于除 IE6 之外的所有经过测试的浏览器。

我已经参考了谷歌的 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图像......

脚本标签放在正文中,在重新验证标记之后,我什至尝试动态加载 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);
}

这给出了相同的行为......最让我困惑的是:仅当页面从另一个页面重定向时才会偶尔出现此问题。(直接在新的浏览器窗口中打开网址或刷新页面总是可以正常工作,但是使用 JavaScript 刷新页面不起作用......)

请帮助,任何建议和/或想法将不胜感激......

4

4 回答 4

1

仔细检查页面源中脚本的 src 是否不是 api.recaptcha.net (有些库使用它,我知道我使用的 Java 是这样做的)。如果是,它会被转发到 www.google.com/recaptcha/api,这似乎会导致 IE6 出现问题。一旦我切换到使用 www.google.com/recaptcha/api 作为实际的脚本 src,IE6 就完全满意了。祝你好运!

于 2010-10-29T20:11:10.273 回答
1

根据reCaptcha 的 Google Group 中的这个线程,我通过使用 https 调用解决了这个问题。

于 2011-06-08T21:26:08.667 回答
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,为了减轻服务器负载,我在服务器端和客户端检测用户的浏览器以注入不同的逻辑。

我知道这是肮脏的解决方法,以防万一这可能对某人有所帮助。

于 2010-07-21T15:30:06.410 回答
-1

不回答(或者是吗?):fo_Ok ie6。说真的,算了。如果没有这种态度,ie6 将永远存在。它就像古老的恶魔,直到有人相信它才会活着。

于 2010-07-21T10:31:59.807 回答