javascript – Recaptcha – 脚本标签注入偶尔失败

我有一个使用reCAPTCHA的表单.出于某种原因,当用户使用不正确的重新捕获值提交此表单时,重新呈现页面时,重新捕获无法呈现.

看起来它发生的是重新捕获尝试注入“脚本”标记,偶尔(并且仅在某些浏览器,某些环境和某些情况下),它未能将“脚本”标记添加到DOM.

它发生如下:

1)表单中嵌入了一些嵌入式javascript,如下所示:

https://www.google.com/recaptcha/api/challenge?k=

2)该脚本正确执行并返回以下内容:

var RecaptchaState = {
 site : 

3)之后通常会发生的事情是,脚本标记被注入页面,recaptcha.js被加载,它将读取RecaptchaState以调用recaptcha来获取要渲染的图像.

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

这就是正在发生的事情,我真的很难过为什么.我只能在Firefox中重现这一点,奇怪的是,它只在某些条件下发生.例如,如果我通过fiddler路由请求,它每次都会工作,永远不会失败.如果我在提交请求之前清除缓存,它将每次都有效.有时,当我期待它失败时,它会起作用,反之亦然.所以这是非常零星的.

所以我的想法是,它可能与js加载的时间有关,这会干扰“document.write”语句.也许其他一些javascript正在干扰它或类似的东西.只是寻找一些关于如何尝试解决这个问题的一般性想法,我可以运行的测试,我可以寻找的东西,或任何真实的想法.

提前致谢

更新

仍然没有运气搞清楚这一点.有人以为我有……我们在firebug控制台中看不到任何错误消息,表明任何事情都会出错,尽管事情显而易见.我们可以使用任何实用程序来仔细查看Firefox中究竟发生了什么吗?我正在考虑像Chrome的“Speed-Tracer”这样的东西,它为您提供非常详细的活动时间表.这里唯一的问题是我们无法重现
它在Chrome中.

最佳答案
事实证明,我们还通过名为Ensighten的标签管理服务包含了一些脚本.其中一个脚本暂时支持“document.write”函数并将其更改为调用另一个函数.但是,他们在发生其他一些事情之后设置了一个回调方法,这会将“document.write”函数重置为通常的状态.

但是,如果脚本评估的时间发生恰到好处,以便在document.write函数处于其更改状态时评估我们的recaptcha javascript …它未能将我们后续的重新接收js注入页面.

话虽这么说,似乎可以认为可以通过这种方式修改documnet.write的强制代码,特别是对于第三方js文件.所以我问他们是否有他们可以避免在他们的代码中这样做.

相关文章

阅读本文之前,分享大家一张图片,看图会发现JavaScript开发...
Promises是一种关于异步编程的规范,目的是将异步处理对象和...
引子 Patrick Catanzariti 是一名Web开发工程师,最近他在 s...
小编吐血整理加上翻译,太辛苦了~求赞! 本文主要总结了Java...
微软于今日(2015年12月10日)宣布即将开源Chakra核心控件,...
通过统计数据库中的1000多个项目,我们发现在 JavaScript 中...