繁体   English   中英

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

[英]IE6 does not parse the loaded JavaScript file (Recaptcha hosted by Google)

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

我已经参考了谷歌的js: http//www.google.com/recaptcha/api/challenge? k = the_key,它是根据fiddler2和'onreadystatechange'事件加载的(有一个readystate =='装载“)

正常的工作流程应该是已经解析的已加载的JS,并且已经请求了另外的js,然后是从谷歌加载的图像。 我的问题是第一个加载的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);
}

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

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

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

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

这不是解决方案,只是一种解决方法。

请求服务器站点上的第一个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,为了减轻服务器负载,我在服务器端和客户端检测用户的浏览器以注入不同的逻辑。

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

不是答案(或者是吗?):fo_Ok ie6。 说真的,算了吧。 没有这种态度,ie6将永远存在。 它就像古代的邪灵一样,直到有人相信它才会活着。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM