我正在努力让Google Recaptcha在我的某个网站上工作,但我遇到了一些问题。我遵循文档here并使用显式渲染函数来创建recaptcha小部件。
包含验证码的表单可以在不重新加载页面的情况下重复使用。换句话说,当有人第一次成功提交表单时,它会折叠并显示一个按钮,允许用户再次使用该表单。
单击此按钮时,我调用JS中的重置功能,使验证码再次工作。可以找到此功能的详细信息here。调用重置功能时,控制台中会出现此错误;
错误:访问属性的权限被拒绝' 10_1417377045946'
之后当有人试图使用验证码时会弹出以下错误:
http:// google.com上的页面说:联系recaptcha服务时出错。
有人可以帮我找到解决这个问题的方法吗?感谢
答案 0 :(得分:1)
如果您需要重置/重新加载Google reCAPTCHA,请使用grecaptcha.reset();
(这不会引发任何错误。)
答案 1 :(得分:-1)
在我自己的网站上实现这个时,我遇到了同样的错误。 这是我使用的解决方法:
我在持有重新验证码的div中添加了一个id,如下所示:
<div id="recaptcha" class="g-recaptcha" data-sitekey="my_key"></div>
当我需要重新加载重新验证码时,我会使用这段javascript:
var recaptchaframe = $('#recaptcha iframe');
var recaptchaSoure = recaptchaframe[0].src;
recaptchaframe[0].src = '';
setInterval(function () { recaptchaframe[0].src = recaptchaSoure; }, 500);
首先我尝试将src直接设置为自身,但是没有刷新iframe。然后我尝试将其设置为空并直接返回源而不使用间隔,但这也没有刷新帧。
最后结合间隔,它很好地刷新,我没有得到我用reset命令得到的Access Denied错误。
答案 2 :(得分:-1)
THX Huron!
是一个笑话,谷歌做了一个错误的事情,你可以在reset()方法中使用build。
此外,他们不会写任何说明小部件只能处理一个请求的行,所以AJAX用户抬头,使用reset()!
但是不要使用reset()!使用@huron的代码。
顺便说一句@huron的代码只适用于一个小部件,这里有多个:
var $recaptcha = $('.g-recaptcha iframe');
if ($recaptcha.length) {
$recaptcha.each(function () {
var $this = $(this),
recaptchaSoure = $this[0].src;
$this[0].src = '';
setInterval(function () { $this[0].src = recaptchaSoure; }, 500);
});
}