Javascript Recaptcha-脚本标记注入偶尔失败

Javascript Recaptcha-脚本标记注入偶尔失败,javascript,dom,recaptcha,script-tag,Javascript,Dom,Recaptcha,Script Tag,我有一个使用reCAPTCHA的表单。由于某些原因,当用户提交此表单时,重新呈现页面时,使用错误的重新捕获值,重新捕获将无法呈现 看起来发生的情况是,recapture尝试注入一个“脚本”标记,但偶尔(仅在某些浏览器、特定环境和特定场景中)无法将该“脚本”标记添加到DOM中 事情是这样的: https://www.google.com/recaptcha/api/challenge?k=<our public key> 1) 表单中嵌入了一些内联javascript,如下所示: h

我有一个使用reCAPTCHA的表单。由于某些原因,当用户提交此表单时,重新呈现页面时,使用错误的重新捕获值,重新捕获将无法呈现

看起来发生的情况是,recapture尝试注入一个“脚本”标记,但偶尔(仅在某些浏览器、特定环境和特定场景中)无法将该“脚本”标记添加到DOM中

事情是这样的:

https://www.google.com/recaptcha/api/challenge?k=<our public key>
1) 表单中嵌入了一些内联javascript,如下所示:

https://www.google.com/recaptcha/api/challenge?k=<our public key>
https://www.google.com/recaptcha/api/challenge?k=
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>');
var RecaptchaState={
地点:,
挑战:,
不正确:错误,
编程错误:“”,
错误消息:“”,
服务器:'https://www.google.com/recaptcha/api/',
超时:18000
};
文件。写(“”);
3) 之后通常会发生的情况是,将脚本标记注入页面,加载recaptcha.js,然后读取RecaptchaState以调用recaptcha以获得要渲染的图像

但是,在某些情况下,由于某种原因,在2)中应该添加的脚本标记似乎从未添加到DOM中,因此从来没有加载过recaptcha.js,所以从来没有呈现过recaptcha!在呈现页面后,我可以在控制台中看到“RecaptchaState”存在并且具有正确的值,只是没有脚本标记

这就是正在发生的事情,我真的很困惑为什么。我只能在Firefox中重现这种情况,奇怪的是,这种情况只能在特定条件下发生。例如,如果我通过fiddler路由请求,它每次都会工作,不会失败。如果我在提交请求之前清除缓存,它每次都会工作。有时候,当我期望它失败时,它会起作用,反之亦然。所以它是非常零星的

所以我的想法是,这可能和js加载的时间有关,这会干扰“document.write”语句。可能是其他javascript干扰了它或类似的东西。我只是想了解一些大概的想法,比如我可能如何尝试解决这个问题,我可以运行的测试,我可以寻找的东西,或者任何真正的想法

提前谢谢

更新

还是没办法弄清楚。我有一个想法。。。我们在firebug控制台中看不到任何错误消息,这表明任何事情都出错了,尽管某些事情显然是错误的。我们是否可以使用任何实用程序来更仔细地了解Firefox中到底发生了什么?我正在考虑类似于Chrome的“速度跟踪器”,它可以为您提供非常详细的事件时间表。这里唯一的问题是我们无法复制
它在Chrome中运行。

事实证明,我们还通过名为的标记管理服务包含了一些脚本。其中一个脚本临时取消了“document.write”函数并将其更改为调用另一个函数。然而,他们在其他一些事情发生后设置回调方法,将“document.write”函数重置为其通常状态

但是,如果脚本求值的时间恰好合适,以便在document.write函数处于其更改状态时对我们的recaptcha javascript求值。。。它未能将我们随后的recaptcha js注入页面


话虽如此,以这种方式修改documnet.write似乎可以被认为是ensighten代码的入侵,特别是对于第三方js文件。所以我问他们是否有任何方法可以避免在他们的代码中这样做。

您是否尝试过用
文档替换
文档。用
文档写入
。createElement
和相关函数?不,代码是从recaptcha发送给我们的,所以我们实际上无法控制它。我不确定他们是否修复了它,我想是的。