有几种方法可以使用javascript加载reCAPTCHA,如下所示:
<html>
<head>
<title>Loading captcha with JavaScript</title>
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script type='text/javascript'>
var captchaContainer = null;
var loadCaptcha = function() {
captchaContainer = grecaptcha.render('captcha_container', {
'sitekey' : 'Your sitekey',
'callback' : function(response) {
console.log(response);
}
});
};
</script>
</head>
<body>
<div id="captcha_container"></div>
<input type="button" id="MYBTN" value="MYBTN">
<script src="https://www.google.com/recaptcha/api.js?onload=loadCaptcha&render=explicit" async defer></script>
</body>
</html>
此代码在pageload上加载验证码。我想在点击&#34; MYBTN&#34;时加载reCAPTCHA。所以代码变成了:
<html>
<head>
<title>Loading captcha with JavaScript</title>
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script type='text/javascript'>
$('#MYBTN').on('click',function(){
var captchaContainer = null;
var loadCaptcha = function() {
captchaContainer = grecaptcha.render('captcha_container', {
'sitekey' : 'Your sitekey',
'callback' : function(response) {
console.log(response);
}
});
};
});
</script>
</head>
<body>
<div id="captcha_container"></div>
<input type="button" id="MYBTN" value="MYBTN">
<script src="https://www.google.com/recaptcha/api.js?onload=loadCaptcha&render=explicit" async defer></script>
</body>
</html>
但是当我点击&#34; MYBTN&#34;这段代码没有用。和reCAPTCHA没有加载。 帮帮我吧。感谢。
答案 0 :(得分:9)
您只需要调用loadCaptcha()
即可
$('#MYBTN').on('click',function(){
var captchaContainer = null;
var loadCaptcha = function() {
captchaContainer = grecaptcha.render('captcha_container', {
'sitekey' : 'Your sitekey',
'callback' : function(response) {
console.log(response);
}
});
};
loadCaptcha(); // THIS LINE WAS MISSING
});
&#13;
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<div id="captcha_container"></div>
<input type="button" id="MYBTN" value="MYBTN">
<script src="https://www.google.com/recaptcha/api.js?onload=loadCaptcha&render=explicit"></script>
&#13;
答案 1 :(得分:4)
简单情况
<强> HTML 强>
<input type="button" id="MYBTN" value="create captcha">
<div id="captcha_container"></div>
<强> JS 强>
var testSitekey = '6LeLzA4UAAAAANNRnB8kePzikGgmZ53aWQiruo7O';
$('#MYBTN').click(function() {
$('body').append($('<div id="captcha_container" class="google-cpatcha"></div>'));
setTimeout(function() {
grecaptcha.render('captcha_container', {
'sitekey': testSitekey
});
}, 1000);
});
答案 2 :(得分:2)
您刚刚在嵌入式脚本中提到了onload。您可以从嵌入式脚本中删除onload,也可以将代码保留在函数名称loadCaptcha中的onclick事件之外。
<强> 1。第一个解决方案:
$('#MYBTN').on('click',function(){
var captchaContainer = null;
var loadCaptcha = function() {
captchaContainer = grecaptcha.render('captcha_container', {
'sitekey' : 'Your sitekey',
'callback' : function(response) {
console.log(response);
}
});
}
});
<script src="https://www.google.com/recaptcha/api.js?render=explicit"></script>
<强> 2。第二个解决方案
<script type='text/javascript'>
var captchaContainer = null;
var loadCaptcha = function() {
captchaContainer = grecaptcha.render('captcha_container', {
'sitekey' : 'Your sitekey',
'callback' : function(response) {
console.log(response);
}
});
};
</script>
<script src="https://www.google.com/recaptcha/api.js?onload=loadCaptcha&render=explicit" async defer></script>
在第一个解决方案中,当您单击按钮时,您的代码将起作用。即使你不必把它放在loadCaptcha函数中,你也可以直接调用grecaptcha.render。
但是当你在脚本标记中提到onload然后根据你的点击它将无法工作,那么它将找到你在脚本中提到的回调函数。当你在onload脚本中编写loadCaptcha并在onClick事件中编写了这个函数。当脚本标签执行时,代码试图找到loadCaptcha函数,该函数在执行脚本标记之前没有初始化(因为它会在click事件上初始化),所以你的脚本无效。
答案 3 :(得分:1)
JS
// Loading captcha with JavaScript on button click
jQuery(document).ready(function ($) {
$('#MYBTN').on('click',function() {
$.getScript( "https://www.google.com/recaptcha/api.js?render=__YOUR_KEY__" )
.done(function( script, textStatus ) {
if(typeof grecaptcha !== "undefined") {
grecaptcha.ready(function () {
grecaptcha.execute('__YOUR_KEY__', {
action: 'homepage'
})
.then(function (token) {
var recaptchaResponse = document.getElementById('captcha_container');
recaptchaResponse.value = token;
});
// Your other code here
// You can control captcha badge here
});
}
});
});
});
HTML
// Required HTML:
<body>
<input type="button" id="MYBTN" value="MYBTN">
<div id="captcha_container"></div>
</body>
答案 4 :(得分:0)
仅在表单的必填字段之一成为焦点之后,我才实现了验证码的加载。我还实现了一个检查变量,以查看是否已插入验证码的依赖项。
这是:
Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo
请注意,在我的情况下,我有一个jQuery('#MyRequiredInputId').focus(function () {
if(typeof loadedRecaptcha != 'undefined'){
return;
}
jQuery.getScript("https://www.google.com/recaptcha/api.js?render=___YOURKEY__")
.done(function (script, textStatus) {
if (typeof grecaptcha !== "undefined") {
grecaptcha.ready(function () {
var siteKey = '___YOURKEY___';
jQuery('body').append(jQuery('<div id="captcha_container" class="google-cpatcha"></div>'));
setTimeout(function() {
grecaptcha.render('captcha_container', {
'sitekey': siteKey
});
}, 1000);
});
}
loadedRecaptcha = true;
});
});
,我想在其中显示验证码。
结果:
答案 5 :(得分:0)
今天,即使没有打开登录模式,我也发现大约有21个针对Google Recaptcha的请求,我遇到了同样的问题:
尝试此方法后:
HTML
<div class="row">
<div class="col-sm-12 btm10">
<div id="captcha_container"></div>
</div>
</div>
JS
<script>
var Sitekey = '<?php echo config('google_key') ?>';
$('#loginbtn').click(function() {
$('body').append($('<div id="captcha_container" class="google-cpatcha"></div>'));
setTimeout(function() {
grecaptcha.render('captcha_container', {
'sitekey': Sitekey
});
}, 1000);
});
</script>
最后,我得到了想要的结果,现在只有在登录模式打开时(基于onClick函数),才会重新加载recaptcha。
不幸的是,我发现,即使在使用上述延迟方法时,主Google Recaptcha脚本仍在控制台中加载,因为主脚本是在页面头上声明的:
<script src="https://www.google.com/recaptcha/api.js"></script>
因此,我将其从page head
中删除,然后将几行代码组合在一起以使其起作用,并且仅在模式打开时才加载,如下所示:
最终代码:
<div class="row">
<div class="col-sm-12 btm10">
<div id="captcha_container"></div>
</div> //Wherever you want the reCaptcha to appear
</div>
<script>
//Add to the header or the footer it doesn't matter
var Sitekey = '<?php echo config('google_key') ?>';
$('#loginbtn').click(function() {
$.getScript("https://www.google.com/recaptcha/api.js") //The trick is here.
$('body').append($('<div id="captcha_container" class="google-cpatcha"></div>'));
setTimeout(function() {
grecaptcha.render('captcha_container', {
'sitekey': Sitekey
});
}, 1000);
});
</script>
您可以在此处查看其运行情况: https://youtu.be/dAZOSMR8iI8
谢谢