Recaptcha 2.0错误:reCAPTCHA占位符元素必须是元素或id

问题描述 投票:0回答:1

我浏览了我能找到的所有其他帖子,但没有一个为我解决了这个问题。我在文档头中仅调用了ReCaptcha API:

<script src="https://www.google.com/recaptcha/api.js?hl=he-IL&onload=onloadCallback&render=explicit" type="text/javascript"></script>

然后紧随其后

var onloadCallback = function() {
    grecaptcha.render("recaptcha2", {
        sitekey: "6LendPIUAAAAAGQqB_2tq8fpgdGfBnEQA3v-CB0g",
        theme: "light"
    });
};

并且我在控制台中收到以下错误:

recaptcha__iw.js:60 Uncaught (in promise) Error: reCAPTCHA placeholder element must be an element or id
    at mv (recaptcha__iw.js:60)
    at Object.render (mootools-core.js:88)
    at onloadCallback (register:56)

这是我的实时页面:https://www.tofesyashir.co.il/register

我尝试更改订单。我尝试将异步延迟添加到脚本调用中,但没有任何帮助。

而且,很奇怪,如果我手动调用grecaptcha.render,即使我在页面中100%存在的ID上使用它,也会再次触发该错误。由于某种原因,它根本不会在任何div上呈现。

你们怎么看?

javascript html forms dom recaptcha
1个回答
0
投票

查看正在获取异常的堆栈跟踪,实际上调用的.render()方法来自mootools:

Uncaught (in promise) Error: reCAPTCHA placeholder element must be an element or id
    at mv (recaptcha__iw.js:60)
    at Object.render (mootools-core.js:88)
    at onloadCallback (register:56)

由于您使用的mootools很小,所以我不能确切地说出哪里出了问题。但是,在我看来,好像是在该方法中完成了一些参数重新绑定,并且很可能这会导致以某种方式最终将reCaptcha方法最终调用的其他东西分配给第一个prepremeter。

所以我尝试从本地副本中从您的网页中删除mootools-确实可以解决问题,reCaptcha在mootools消失后仍能正常工作。

也有一个针对此的错误报告:https://github.com/google/recaptcha/issues/376。此处提供的链接可导致在相关的buig中发布解决方案:手动更新mootools似乎可以解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.