You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

reCaptcha onload回调函数未触发问题排查求助

解决reCaptcha onload回调未触发、控制台无输出的问题

以下是几个常见的排查方向和解决方案:

1. 确保回调函数处于全局作用域

reCaptcha的onload回调要求函数必须是全局可访问的。如果你的回调函数被包裹在局部作用域(比如IIFE、DOM加载事件回调里),reCaptcha加载完成后找不到这个函数,自然不会触发。

修改代码,将回调挂载到window对象:

window.recaptchaCallback = function () {
  console.log('recaptcha is ready');
  grecaptcha.ready(function() {
      grecaptcha.execute('SITE_KEY', {action: 'some_action'}).then(function(token) {
          console.log(token);
      });
  });
}

2. 调整脚本加载顺序

你当前的代码中,reCaptcha脚本使用了async defer,它会异步加载并执行,可能在你的回调函数定义脚本之前完成加载。此时recaptchaCallback还未定义,导致无法触发。

把回调函数的定义放在reCaptcha脚本之前:

<script type="text/javascript">
  window.recaptchaCallback = function () {
    console.log('recaptcha is ready');
    grecaptcha.ready(function() {
        grecaptcha.execute('SITE_KEY', {action: 'some_action'}).then(function(token) {
            console.log(token);
        });
    });
  }
</script>
<script src="https://www.google.com/recaptcha/api.js?onload=recaptchaCallback&render=SITE_KEY" async defer></script>

3. 确认reCaptcha版本与render参数匹配

  • 如果使用的是reCaptcha v2:render参数应该设为explicit,而不是site key。v2的显式渲染才会触发onload回调,之后你需要在回调中调用grecaptcha.render()来渲染验证码组件。
  • 如果使用的是reCaptcha v3:确认你的site key是v3类型(在谷歌后台创建时选择v3),并且已将当前域名添加到reCaptcha控制台的“域名”列表中。

4. 清除浏览器缓存

浏览器可能缓存了旧的脚本资源,导致新的回调代码未生效。按Ctrl+Shift+R(Windows/Linux)或Cmd+Shift+R(Mac)强制刷新页面,清除缓存后重试。

5. 排查脚本冲突

检查页面中其他脚本是否覆盖了window.grecaptcha或修改了全局作用域,导致reCaptcha无法正常初始化。可以在控制台手动输入grecaptcha,看是否能正常访问该对象。

内容的提问来源于stack exchange,提问作者Roshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:45:46