window.grecaptchaReady = new Promise((resolve, reject) => {
  setTimeout(reject, 10000);
});

部分网络环境下注册页的提交按钮一直转圈,控制台报 grecaptcha is not defined,脚本请求超时,换网络就恢复。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:页面同步等待第三方验证码脚本加载,加载完成之后才启用按钮,脚本被拦或超时就没有任何兜底,表单永远停在禁用状态。

「reCAPTCHA 加载失败」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。监控和日志的时间要对上,时区不一致会多绕很大一圈。

临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

处理上按这个顺序:脚本加错误回调和超时,十秒没加载出来就切到备用验证方式;按钮初始可用,提交时再取令牌,取不到给出明确提示;网络面板里屏蔽该域名,走一遍完整提交。

确认没问题再收工,屏蔽验证码域名后表单仍能提交,或者给出可操作的提示而不是一直转圈。

作者 9823189