为什么reCaptcha窃取焦点在页面加载

时间:2014-04-26 01:43:25

标签: javascript recaptcha

当Recaptcha加载到页面上时突然开始窃取焦点,导致页面向下滚动到表单(非常烦人)。这似乎是一个新的错误?

参见示例:http://www.gullixson.com/Contact-Us

显然,加载reCaptcha的主要Google图书馆 http://www.google.com/recaptcha/api/challenge?k=UNIQUEAPIKEY&lang=en 要求http://www.google.com/recaptcha/api/js/recaptcha_canary.js

在那里,init()函数似乎触发reload()函数,这导致Recaptcha.focus_response_field()函数加载。

似乎我们无能为力......直到他们修复它?

有谁知道如何向Google报告此错误?或者解决这个问题的方法?

5 个答案:

答案 0 :(得分:6)

最简单的解决方法是在重新加载JS后重新定义Recaptcha.focus_response_field

// Load recaptcha JS

// ...

Recaptcha.focus_response_field = function(){return false;};

这使焦点操作基本上变成了非操作。

编辑:测试并使用Chrome,Firefox和IE9

答案 1 :(得分:1)

我用一点jQuery修复代码解决了这个问题:

$(document).ready(function() {
    $(window).focus(function(){
        /* If on load is detected a div to show reCaptcha code 
           ('div#captcha') simply force the focus to the top of the page. 
         */
       if( $('body').has('div#captcha') ){
         $('html,body').animate({scrollTop:0}, 1000, 'swing');
       }
    });
});

答案 2 :(得分:1)

使用jQuery快速解决方法:

<style>
#recaptcha_widget_div{
display: none;
}
</style>

...existing recaptcha code here...

<script>
$("body").on("focus", "input, textarea", function() {
    $("#recaptcha_widget_div").show();
});
</script>

答案 3 :(得分:1)

昨天我遇到了同样的问题。

今天,我再次检查,似乎谷歌已经解决了这个问题。

您不再需要使用jQuery来应用任何黑客攻击。

答案 4 :(得分:0)

尝试评论Recaptcha.focus_response_field

Recaptcha.create("your_public_key", element, {
   theme: "red",
   callback: Recaptcha.focus_response_field // <-- Comment this line
});