- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我有一个 ajax 表单:
<form id="my_form">
<input type="text" id="field1" />
<input type="submit" value="submit" />
</form>
以及js代码:
document.getElementById("my_form").onsubmit = function(e) {
e.preventDefault();
var xhr = new XMLHttpRequest();
//.............. send request to a server
在文档中,它假定表单是普通表单,而不是 ajax。我究竟应该如何将不可见的 reCaptcha 集成到我的 ajax 表单中?例如:
<form id="my_form">
<input type="text" id="field1" />
<div class="g-recaptcha" data-sitekey="12345" data-callback="????></div>
<input type="submit" value="submit" />
</form>
特别是,我应该为“数据回调”处理程序指定什么?同样,在文档中,它的数据回调提交了一个表单,但是是一个普通的表单,而我的是 ajax。我是否需要“数据回调”?我不应该在我的处理程序中调用 recaptcha 吗?怎么办?
有“呈现”、“getResponse”和“执行”。我应该使用哪一个?从文档中不清楚。
最佳答案
我同意“隐形”recaptcha 文档不够全面。在了解如何使用它之前,我不得不花一些时间深入研究“可见”recaptcha 的代码示例和文档。
先说recaptcha API:
grecaptcha.render(htmlEl, options, inherit)
是在页面上呈现验证码 HTML 的 JS API 方法。默认情况下,recaptcha 脚本将尝试查找具有 class="g-recaptcha
的任何元素并尝试立即呈现,但可以通过附加 ?render=explicit
查询来覆盖此行为recaptcha 脚本 src url 的参数。当您的 recaptcha .g-recaptcha
元素在脚本加载后的某个时间点附加到 DOM 时,您可能还希望使用此 api 按需呈现 recaptcha html。此 api 返回一个 ID 值,可以传递给其他 api 方法,但如果不传递,那些 api 的查找和引用首先在页面上 repcaptcha。
grecaptcha.getResponse(optional_id)
返回 token 。如果 token 为空字符串,则表示用户尚未通过验证,即用户尚未完成验证码挑战。
grecaptcha.execute(optional_id)
api 以编程方式按需触发 recaptcha 挑战。此 api 仅适用于“隐形”recaptcha。当用户点击 recaptcha 模块时,会触发可见的 recaptcha 挑战。
grecaptcha.reset(optional_id)
将重置挑战,即每次服务器无法使用 recaptcha api 服务器验证 token 时都必须完成(因为 token 是一次性使用的),但这取决于您实现,您可以决定随时重置。
现在,让我们谈谈数据回调:
data-callback
是一个属性,您可以在其中传递全局命名空间函数的名称,即一些可以作为 window['nameOfFunction'] 访问的函数。每次使用您最终将传递给服务器的 token 值成功验证用户时,都会调用此回调。这与 grecaptcha.getResponse()
返回的 token 相同,因此从技术上讲,您根本不需要此功能。但它可以作为回调,让您知道用户已通过验证,以防您需要更新 UI 或其他内容。
如果出于某种原因您不希望从窗口命名空间访问此回调,您可以在选项对象中将此方法与 callback
键传递给 grecaptcha.render()
。注意:options.callback
可以取一个字符串值,相当于在 HTML 中传递 data-callback
属性,即必须是 window 命名空间中的函数。但是 options.callback
也可以采用“函数”值。
HTML
<script src="https://www.google.com/recaptcha/api.js?render=explicit&onload=onScriptLoad" async defer></script>
JS
window.onScriptLoad = function () {
// this callback will be called by recaptcah/api.js once its loaded. If we used
// render=explicit as param in script src, then we can explicitly render reCaptcha at this point
// element to "render" invisible captcha in
var htmlEl = document.querySelector('.g-recaptcha');
// option to captcha
var captchaOptions = {
sitekey: '6Lck',
size: 'invisible',
// tell reCaptcha which callback to notify when user is successfully verified.
// if this value is string, then it must be name of function accessible via window['nameOfFunc'],
// and passing string is equivalent to specifying data-callback='nameOfFunc', but it can be
// reference to an actual function
callback: window.onUserVerified
};
// Only for "invisible" type. if true, will read value from html-element's data-* attribute if its not passed via captchaOptions
var inheritFromDataAttr = true;
// now render
recaptchaId = window.grecaptcha.render(htmlEl, captchaOptions, inheritFromDataAttr);
};
// this is assigned from "data-callback" or render()'s "options.callback"
window.onUserVerified = function (token) {
alert('User Is verified');
console.log('token=', token);
};
// click handler for form's submit button
function onSubmitBtnClick () {
var token = window.grecaptcha.getResponse(recaptchaId);
// if no token, mean user is not validated yet
if (!token) {
// trigger validation
window.grecaptcha.execute(recaptchaId);
return;
}
var xhrData = {
'g-recaptcha-response': token
// more ajax body/data here
};
// proceed with appending more ajax call data to xhrData and then rest of ajax call process
// var xhr = new XMLHttpRequest();
// ... ... .... ... ...
}
关于javascript - 隐形谷歌 Recaptcha 和 ajax 形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42859813/
我在我的一种表单中集成了 reCAPTCHA v3。在 onload 中,右下角有一个生成的 token 和谷歌验证码标志。但是当我提交表单时,在控制台中会显示一个错误,“错误:不存在 reCAPTC
是我还是 recaptcha 图像无法翻译成除 EN 以外的其他语言? 我有 它仍然是英文的。这是故意的吗? 最佳答案 对于 reCAPTCHA 2. 一段时间过去了 这是你的cdn链接看最后,hl参
我正在尝试按照 https://developers.google.com/recaptcha/docs/faq#can-i-use-recaptcha-globally 中的说明在全局范围内使用 r
我们在我们的网站之一中集成了隐形 recaptcha。每当我们提交表单时,它就会自动提交。 我在一些谷歌小组中读到,在边缘浏览器上访问时我们会遇到挑战。但对我们来说,它是自动提交的。 测试隐形reca
我目前使用的是假的开发域而不是 localhost在我的本地机器上,因为我有多个要在本地管理的网站。 Google reCAPTCHA 无法识别我的域,并给我以下错误:ERROR: Invalid d
reCAPTCHA 需要公钥和私钥才能在网站中实现。它还需要 reCAPTCHA key ,具体取决于网站。这背后的原因是什么?公钥和私钥是否会影响 reCAPTCHA 中显示的文字?我知道我可以将公
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭13 年前。 Improve th
我目前使用隐形recaptcha,如果它认为用户是机器人,它会自动显示一个验证码。 现在有了 Recaptcha v3,我很难理解它应该如何使用。 它返回一个分数,但是如果分数很低,这可能表明用户是机
我希望,如果用户(或漫游器)重复做同样的事情,那么Recaptcha v3的得分会下降,但是事实并非如此。 这是从我的日志中摘录的内容,当我在正在构建的网站上登录时尝试使用不同的密码时,该日志是其中的
我有新的隐形 recaptcha 工作正常,但它把徽章放在左下角或右下角。您可以使用“data-badge='inline'”覆盖它,并将其拉入表单中。谷歌对如何实际移动它非常含糊。您无法隐藏它,因为
我的网站正在使用 Google reCAPTCHA 控件,但我听说它被阻止了 中国,反正我看到有人报告说将 API 更改为 https://www.recaptcha.net在中国工作? Anyone
我面临以下情况:当用户点击提交按钮时,应用会禁用该按钮。然后,当 ReCaptcha 的回调函数被调用时,我可以再次启用该按钮。但是如果用户关闭验证窗口我怎么知道然后再次启用我的按钮? 最佳答案 我在
在 reCAPTCHA v3 文档中,它说 reCAPTCHA works best when it has the most context about interactions with your
我正在尝试在我的网站上呈现 google reCaptcha。我去了google reCaptcha admin ,设置标签,并添加两个域:一个是localhost,另一个是mydomain.com。
我已登录我的 Google 帐户,并导航到 reCaptcha 设置页面。但它显示的只是创建新 reCaptcha 帐户的表单。 我想我曾经能够为我的不同域找到我以前的帐户设置,但现在似乎没有任何地方
ReCaptcha v3 将不再提供验证码,而是依靠浏览器指纹识别和谷歌可以获得的有关您的其他信息。 这是一个测试:https://recaptcha-demo.appspot.com/recaptc
google recaptcha 创建了一个没有可访问性属性的 textarea,例如 aria-label。这导致 recaptcha 无法通过 Siteimprove 进行可访问性扫描。 我已经尝
我正在我的一个网站上实现 reCAPTCHA,并且我已经成功实现了它。它工作正常。有时仅通过单击“我不是机器人”才能完成 reCAPTCHA,但有时它会显示图像网格以选择正确的图像并完成验证码。 我只
我已经在我的网站上实现了 reCaptcha,但每当我测试它时,我都会尝试 3-5 次才能成功。我认为我的用户不会喜欢这个。我注意到有些网站有诸如“2 + 2 是什么?”之类的问题。类似的东西同样有效
我在 Angular+Spring MVC 应用程序中使用 Google reCaptcha 进行用户登录。我想知道谷歌是否对其每天(或周/月/年)支持的点击次数有任何限制。 最佳答案 首先,我建议您
我是一名优秀的程序员,十分优秀!