Recaptcha 2.0 error: reCAPTCHA placeholder element must be an element or id

Recaptcha 2.0 error: reCAPTCHA placeholder element must be an element or id

我查看了我能找到的所有其他 post,其中 none 为我解决了问题。 我在我的文档头中调用了一次 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 上呈现。

大家怎么看?

查看异常的 stackm 跟踪,您会发现实际调用的 .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 被缩小了,所以我不能说清楚到底哪里出了问题。然而,在我看来,好像在该方法中完成了一些参数重新绑定,并且可能这会导致将其他内容分配给第一个 apremeter,无论以何种方式最终调用 reCaptcha 方法。

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

还有一个公开的错误报告:https://github.com/google/recaptcha/issues/376。 link 提供了相关问题中发布的解决方案:手动更新 mootools 似乎可以解决问题。