这实际上与recaptcha v3 前端返回奇怪的、空洞的(无效?)结果相同)]}'
在 recaptcha 设置页面上 - https://www.google.com/recaptcha/admin/site/.../settings我有
我可以看到上一个 stackoverflow 问题和我现在的案例之间的唯一区别是:
在上一个问题中,海报显然改变了动作名称,一切都很好。我已经摆弄了动作名称,但它没有改变任何东西。我将在下面显示响应详细信息。在我这样做之前,这里是我页面中相关代码的摘录:
<script src="https://www.google.com/recaptcha/api.js?render=MYKEY"></script>
<script>
grecaptcha.ready(function () {
grecaptcha.execute('MYKEY', {action: 'contactpage'});
});
<script>
Run Code Online (Sandbox Code Playgroud)
这是我运行它时发生的情况。结果在 Chrome 和 Firefox 中相同。在浏览器控制台中,我看到以下响应:
XHR POST https://www.google.com/recaptcha/api2/reload?k=*MYKEY*
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Response Payload
)]}'
["rresp"," ... (and much more)... ]
Run Code Online (Sandbox Code Playgroud)
脚本标签中的recaptcha api url 与控制台中显示的url 明显不同,这对我来说很好。显然,很多事情都在幕后进行。
自过去 6 个月以来,我们一直在我们的网站上使用 recaptcha V3。但自上周以来,我们面临网站所有者的错误:密钥类型无效。我仔细检查并确认谷歌 recapcha 控制台中的密钥类型是 V3。我创建了新的 V3 密钥并进行了检查。但这也不起作用。关于如何解决这个问题有什么想法吗?
我正在使用 google recaptcha V2,进行验证码验证。最近,我在使用方法重置验证码时遇到问题grecaptcha.reset()。
请参考下面的错误截图:
已在 google recaptcha 演示网站中检查了相同的场景,并且存在相同的问题。
有人能帮忙吗?有什么解决方法吗?提前致谢。
当前grecaptcha.execute正在页面加载时执行,如下面的第一个 JS 示例所示。如果触发 reCAPTCHA 质询,则会在页面加载时发生这种情况。理想情况下,当单击表单提交按钮时会发生这种情况。因此,我通过将其移动到提交事件(第二个 JS 示例)并将 axios 函数放入承诺中来进行尝试。它在 grecaptcha.execute 执行完成之前提交。
我在这里不明白的是什么?我第一次接触 Promise,所以我不了解 Promise 是如何工作的吗?这不是这个问题的最佳解决方案吗?完全是别的东西吗?
HTML
<head>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" defer></script>
</head>
Run Code Online (Sandbox Code Playgroud)
JS
const form = document.querySelector('#subscribe');
let recaptchaToken;
const recaptchaExecute = (token) => {
recaptchaToken = token;
};
const onloadCallback = () => {
grecaptcha.render('recaptcha', {
'sitekey': 'abcexamplesitekey',
'callback': recaptchaExecute,
'size': 'invisible',
});
grecaptcha.execute();
};
form.addEventListener('submit', (e) => {
e.preventDefault();
const formResponse = document.querySelector('.js-form__error-message');
axios({
method: 'POST',
url: '/actions/newsletter/verifyRecaptcha',
data: qs.stringify({
recaptcha: recaptchaToken,
[window.csrfTokenName]: window.csrfTokenValue,
}),
config: { …Run Code Online (Sandbox Code Playgroud) 问题总结:
Google V2 ReCapcha 取消了所有页面速度调整工作,这些工作只是为了加载小“不可见”[不是真正不可见] iFrames
情况:
得到了一个很棒的 SEM 登陆页面,构建良好,压缩,缩小的 JS/css,CDN,最小字体快如闪电,99% A 页面速度得分...
但是一旦JS层被激活
Google V2 Invisible ReCapcha 尝试处理页面上的 3 个 FORM 元素(潜在客户表单、时事通讯和基于 Twilio 的 SMS“点击通话”表单)速度得分受到影响(并且不是可接受的程度,严重程度)
多年来一直是一个问题,一直都知道它,但想现在也许有解决方案吗?
所有表单都是 100% AJAX。使用其他东西也可以,也许是 V3?异步延迟,尝试使用延迟和不延迟 - 仅从 Google 传递 JS 文件的加载时间似乎“不合理”...(尝试抓取 JS 文件并在本地提供它们,无论如何都是非正统且“不起作用”)
接受建议。
javascript performance pagespeed invisible-recaptcha grecaptcha
grecaptcha ×5
recaptcha ×3
javascript ×2
recaptcha-v3 ×2
ajax ×1
anti-bot ×1
axios ×1
captcha ×1
pagespeed ×1
performance ×1
promise ×1
validation ×1