这是一个非常奇怪的问题,我尝试在其中一个网站上使用 Recaptcha,它适用于除 IE6 之外的所有测试浏览器。
我参考了google的js:http://www.google.com/recaptcha/api/challenge?k=the_key http://www.google.com/recaptcha/api/challenge?k=the_key它是根据 fiddler2 和'onreadystatechange'事件加载的(其中有一个readystate =='loaded')
正常的工作流程应该是解析加载的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);
}
这给出了相同的行为......最让我困惑的是:
仅当页面从另一个页面重定向时,偶尔才会出现此问题。 (直接在新浏览器窗口中打开网址或刷新页面总是可以正常工作,但是使用 JavaScript 刷新页面不起作用...)
请帮忙,任何建议和/或想法将不胜感激......