我有一个使用验证码的形式。出于某种原因,当用户提交此表单时采用了错误的重新捕获值,当页面重新呈现时,重新捕获无法呈现。的Recaptcha - 脚本标记注入失败零星
看起来发生的情况是,重新获取尝试注入一个“脚本”标签,并且偶尔(并且只在某些浏览器,某些环境和某些情况下),它没有添加该“脚本”标记到DOM。
它发生是这样的:
1)有一些内嵌JavaScript嵌入在像这样的形式:
https://www.google.com/recaptcha/api/challenge?k=<our public key>
2)该脚本正确执行和返回如下:
var RecaptchaState = {
site : <some value>,
challenge : <challenge key>,
is_incorrect : false,
programming_error : '',
error_message : '',
server : 'https://www.google.com/recaptcha/api/',
timeout : 18000
};
document.write('<scr'+'ipt type="text/javascript" s'+'rc="' + RecaptchaState.server + 'js/recaptcha.js"></scr'+'ipt>');
3)什么之后通常的情况是,脚本标记注入页面,recaptcha.js被加载时,它会读取RecaptchaState拨打电话出去使用recaptcha来渲染图像。
但是,在某些情况下,出于某种原因,应该添加到2)中的脚本标记永远不会添加到DOM中,因此从不会加载recaptcha.js,因此从不会呈现该代码!在页面呈现完成后,我可以在控制台中看到“RecaptchaState”存在并且具有正确的值,只是没有脚本标记可以与它一起使用。
所以,这就是正在发生的事情,我真的很为难,为什么。我只能在Firefox中重现这一点,奇怪的是,它只发生在某些条件下。例如,如果我通过fiddler路由请求,它将每次都工作,永远不会失败。如果我在提交请求之前清除了缓存,它将每次都有效。有时候,当我期待它失败时,它会起作用,反之亦然。所以它非常零星。
所以我的想法是,也许是有事情做与JS加载它与“文件撰写”语句干扰的时机。也许其他一些JavaScript会干扰它或类似的东西。只是寻找一些一般的想法,我可能会试图弄清楚,我可以运行的测试,我可以寻找的东西,或任何真正的想法。
在此先感谢
更新
仍然没有运气搞清楚了这一点。我以为有一个想法......我们在萤火虫控制台中看不到任何错误讯息,表明任何事情都会出错,尽管显然是有的。有没有我们可以用来详细了解Firefox中究竟发生了什么的公用程序?我正在考虑Chrome的“Speed-Tracer”,它会给你一个非常详细的事件时间表。这里唯一的问题是我们无法在Chrome中重现 。
您是否尝试用'document.createElement'和相关函数替换'document.write'? – Lekensteyn 2011-04-20 13:56:12
不是,那个代码是从recaptcha发给我们的,所以w真的不能控制它。 – JasonStoltz 2011-04-20 18:04:28