IE6不解析加载的JavaScript文件(由Google托管的Recaptcha)

IE6不解析加载的JavaScript文件(由Google托管的Recaptcha),javascript,internet-explorer-6,recaptcha,Javascript,Internet Explorer 6,Recaptcha,这是一个非常奇怪的问题,我试图在其中一个网站上使用Recaptcha,它适用于除IE6之外的所有测试浏览器 我提到了谷歌的js: 它是根据fiddler2&onreadystatechange事件加载的(该事件的readystate=='loaded') 正常的工作流程应该是解析加载的JS,并请求另一个JS,然后从google加载图像。我的问题是第一个加载的JS文件(内容与下面类似): 其次,没有第二个脚本请求(根据fiddler2),更不用说recaptcha图像了 脚本标记放在主体内部,在r

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

我提到了谷歌的js: 它是根据fiddler2&onreadystatechange事件加载的(该事件的readystate=='loaded')

正常的工作流程应该是解析加载的JS,并请求另一个JS,然后从google加载图像。我的问题是第一个加载的JS文件(内容与下面类似):

其次,没有第二个脚本请求(根据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);
}
这就产生了同样的行为。。。最让我困惑的是: 只有当页面从另一个页面重定向时,才会偶尔出现此问题。(在新浏览器窗口中直接打开url或刷新页面始终可以正常工作,但使用JavaScript刷新页面不起作用…)


请帮忙,任何建议和/或想法都将不胜感激……

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

这不是一个解决办法,只是一个解决办法

请求第一个js文件: 在服务器站点上,并将脚本的第一部分直接注入页面:

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()函数加载第二个脚本:

基于我的测试,这个解决方案适用于IE6,为了减少服务器的负载,我在服务器端和客户端检测用户的浏览器,以注入不同的逻辑


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

请仔细检查页面源代码中的脚本src是否为api.recaptcha.net(有些库使用它,我知道我使用的Java库使用它)。如果是的话,它会被转发到www.google.com/recaptcha/api,这似乎会导致IE6出现问题。当我切换到使用www.google.com/recaptcha/api作为实际脚本src时,IE6非常高兴。祝你好运

我通过使用https呼叫解决了这个问题,正如reCaptcha的Google Group中的thread所说的那样。

微软自己不是已经说过IE6是一堆过时的病毒磁铁安全缺陷吗,使用中的每一个副本都可能会损坏互联网,每个人都需要认真地把它从他们的机器上取下来吗?当然不是用那些确切的话,但是。。。我认为有人甚至以不负责任和疏忽为由建议负责任的ISP应该禁止IE6用户。是的,他们说了一些类似的话。然而,正如你所看到的,一些努力工作的网络开发人员仍然考虑到了这一点。如果我能生活在不关心IE6的情况下,生活会更好。但是,只要客户还在使用它,我就必须让它工作。Leader正在考虑使用第三方库自行生成验证码:(@ccppjava-您是否也支持使用Amiga的任何人?这就是“只要客户端仍在使用”的问题所在逻辑-某个地方的人可能仍然想使用的内容没有限制。你可以打赌,某个地方的某个人想使用差异引擎浏览web。谢谢你的建议,将在下一个项目中尝试(如果需要,请重新启动)
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);
}
var RecaptchaState = {
    site : 'xxxxxxxxxxxx',
    challenge : 'xxxxxxxxxxxxxxxxxxxxxxxxx',
    is_incorrect : false,
    programming_error : '',
    error_message : '',
    server : 'http://www.google.com/recaptcha/api/',
    timeout : 18000
};