我最近开始使用Google的新方法Recaptcha - 他们的新Invisible Recaptcha。我意识到这个版本的实现有点不同,因为你将recaptcha属性直接附加到你的提交按钮,然后调用google的recaptcha api并开始验证过程。我所有这些工作都很好,但我遇到的一个主要问题是"受recaptcha保护"徽章定位。
将recaptcha配置添加到我的提交按钮后,我开始在屏幕右侧看到徽章。根据其他网站,这个徽章应该只是一个方形的recaptcha徽标,直到它徘徊,然后它应该滑出来,我最初在我的网站上看到的大矩形。
以下是我在实施隐形重拍后在网站上看到的图片。
以下是包含recaptcha属性的提交按钮代码:
<button class="btn btn-primary btn-block g-recaptcha" data-sitekey="key"
data-callback="submitsecure" data-badge="bottomright" type="submit">Get Started</button>
注意:data-badge
和inline
等其他bottomleft
选项会导致相同的定位问题。
包含按钮的表单代码:
<form action="processjoin.php" method="post" id="signupform" style="padding-top:10px;padding-bottom:10px;max-width:50%;">
<h2 class="sr-only">Login Form</h2>
<div></div>
<div class="illustration"><i class="icon ion-ios-pulse-strong"></i>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<input type="text" name="name" placeholder="Your Name" class="form-control" id="name" />
</div>
<div class="form-group">
<input type="text" name="username" placeholder="Username" class="form-control" id="username" />
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<input type="email" name="email" placeholder="Email" class="form-control" id="email" />
</div>
<div class="form-group">
<input type="password" name="password" placeholder="Password" class="form-control" id="password" />
</div>
</div>
</div>
<div class="form-group">
<button class="btn btn-primary btn-block g-recaptcha" data-sitekey="6LfdMhkUAAAAAHl-LXZm_gPP1g-UX0aWt8sMR4uW" data-callback="submitsecure" data-badge="bottomright" type="submit">Get Started</button>
</div>
<a href="#" class="forgot">
<div></div>Already have an account? Sign in.</a>
</div>
</form>
我遇到了这个回收徽章的两个问题:
答案 0 :(得分:6)
经过大量的反复试验后,我发现recaptcha徽章定位于其包含的元素而不是身体,并且它还从其包含的元素继承了它的line-height
。
由于我无法直接从其包含元素中移除徽章并将其移动到正文,因此我解决了JQuery的问题以及轻微的CSS更改。
JQuery:将徽章添加到正文而不是其包含的元素(表单)
为了做到这一点,我必须确保徽章已经完全加载到网站中。谷歌使这很难,但我能够通过使用jQuery.initialize by timpler来实现。
一旦我在我的页面上运行了initialize.min.js,我只是使用了这段代码:
jQuery(document).ready(function() {
$('.grecaptcha-badge').appendTo("body"); //fix recaptcha positioning to body
});
$.initialize(".grecaptcha-badge", function() {
$(this).appendTo("body"); //fix recaptcha positioning to body, even if it loads after the page
});
CSS:为line-height
添加了一项更改,以便使用其容器正确定位徽章
.grecaptcha-badge {
line-height:50px !important;
}
这是一个难以理解的问题,但最终它只是归结为徽章继承了其母版的一些太多属性。我希望这有助于将来的某个人!
答案 1 :(得分:6)
这可能会有所帮助:https://developers.google.com/recaptcha/docs/invisible#config
您可以设置data-badge="inline"
以允许您控制CSS。
答案 2 :(得分:0)
您可以在页面上任何位置的div
元素中添加验证码
<div class="g-recaptcha"
data-sitekey="your_site_key"
data-callback="onSubmit"
data-size="invisible">
</div>
提交表单时,应调用以下javascript来启动验证码验证
grecaptcha.execute();
验证码验证成功后,将调用onSubmit
函数(在data-callback
标签属性中指定)。在那里,您将获得recaptcha令牌,该令牌可以作为隐藏字段注入到表单中以进行后端验证。
function onSubmit(recaptchaToken) {
// inject token as hidden form field and submit form
}