我需要澄清我和 recaptcha 库之间可能存在的误解。
我通过搜索和查找 v3 实现的 YouTube 视频看到的所有示例都在 a 的上下文中附加了 recaptcha 准备/执行功能<form>
......但我试图在 a 的上下文之外使用<form>
reCaptcha以下方式:
- 用户在搜索框中输入姓名或姓名的一部分
- 前端,在输入延迟或回车键后,在系统中获取与此输入匹配的名称(部分或完整)
- 结果被加载到自动填充的下拉列表中。
- 用户通过单击或向下箭头选择适当的名称,这将搜索有关该用户的特定数据。
如果我能弄清楚如何让 reCaptcha 令牌出现在名称下拉搜索中,我将能够将该解决方案扩展到第四点......但我担心这可能是不可能的。
以下所有代码都是 JavaScript:
相关位
搜索字段上的侦听器:
$(".web-search-content").on("keyup", ".searchField", function(e) {
if (
e.keyCode != 40 &&
e.keyCode != 38 &&
e.keyCode != 13 &&
e.keyCode != 27
) {
delayCall($(this), 800, nameSearch, e);
} else if (e.keyCode == 27) {
$(".name-search-results").remove();
}
});
姓名搜索功能:
function nameSearch(obj, e) {
if (!e) {
e = window.event;
}
var container = $(".name-search-results");
if (
e.keyCode != 40 &&
e.keyCode != 38 &&
e.keyCode != 13 &&
e.keyCode != 27
) {
var field = obj;
var value = field.val();
if (value != undefined && value.length > 0) {
var captchaToken = "";
grecaptcha.execute('<REDACTED>', {action: 'webSearch/nameSearch'}).then(function(token) {
captchaToken = token;
console.log(captchaToken);
document.getElementById("g-recaptcha-response").value = token;
})
$.post("../webSearch/nameSearch", { query: value, captchaToken: captchaToken }, function(resp) {
showNameResults(resp);
});
} else {
container.remove();
}
}
}
有人可以确认 reCaptcha v3 必须在表单的上下文中使用,或者它可以处理这样的事件......如果是这样,如何处理?