我正在开发一个MVC .Net应用程序。 我们最近在其中引入了reCaptcha v3,它在Chrome和Firefox中完美运行,但在IE中则完全不行。 下面是标头部分中包含的代码:
<script src="https://www.google.com/recaptcha/api.js?render=@ViewBag.CaptchaSiteKey"></script>
<script type="text/javascript">
grecaptcha.ready(function () {
var test = grecaptcha.execute('@ViewBag.CaptchaSiteKey', { action: '@ViewBag.CaptchaEnvironment'+'_' + '@ViewBag.CaptchaActionName'}).then(
function (token) {
// verify the token on the server
document.getElementById("RecaptchaResponse").value = token;
}, function (reason) {
document.getElementById("RecaptchaResponse").value = reason;
});
});
</script>
Viewbag 变量按预期设置,不会丢失任何内容。
需要馈送的对象以我的身体部分中包含的形式创建:
input id="RecaptchaResponse" name="RecaptchaResponse" type="hidden" autocomplete="off">
但在 IE11 中使用时仍为空。
我读过很多文章都在谈论这种行为,但没有任何效果。
提前谢谢你
Google reCAPTCHA v3 利用"JavaScript Promises"来正常运行。
在代码示例中,grecaptcha.execute(...)
为令牌发出"承诺"。 一旦承诺"实现",代码的.then(function() { ... })
部分就会被执行。
Chrome/Firefox的现代版本支持JavaScript Promises。 不幸的是,IE11没有。 为了使承诺在IE11上起作用,您需要包含一个polyfill(请参阅:https://github.com/stefanpenner/es6-promise(。