Как загрузить код рекапчи только при загрузке диалогового окна jQuery - PullRequest
2 голосов
/ 14 января 2011

У меня есть код рекапчи в диалоге jQuery.

По какой-то причине, когда я загружаю страницу в Firefox, она зависает (хотя отлично работает на IE / Chrome). Я обнаружил, что в диалоге вызывается рекапча.

Я подумал, что если я загружу код рекапчи только тогда, когда пользователь откроет диалоговое окно, которое может решить проблему, а также поможет мне уменьшить количество исходящих соединений в целом.

это «источник просмотра» бита, связанного с recaptcha:

<div id="dialog-form" title="Create new user"> 
    <p class="validateTips">You can also Connect with Facebook</p> 
    <fb:login-button perms="publish_stream,create_event,rsvp_event,user_birthday,user_events,user_hometown,user_location,user_online_presence">Login to Facebook</fb:login-button> 
    <form id="regform" action="" method="post"> 
    <fieldset> 
        <label for="name">Username</label> 
        <input type="text" name="username" id="name" class="text ui-widget-content ui-corner-all" value="" /> 
        <label for="email">Email</label> 
        <input type="text" name="email" id="email" class="text ui-widget-content ui-corner-all" value="" /> 
        <label for="password" style="float:left;">Password&nbsp;&nbsp;&nbsp;&nbsp;</label> 
        <input type="password" name="password" id="password" value="" class="text ui-widget-content ui-corner-all" /> 
        <input type="hidden" name="reg" value="reg" /> 
    </fieldset> 
    <script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=6LerjL4SAAAAAG3sq_40sHyvch501El5JoNkHqOR"></script> 

    <noscript> 
        <iframe src="http://www.google.com/recaptcha/api/noscript?k=6LerjL4SAAAAAG3sq_40sHyvch501El5JoNkHqOR" height="300" width="500" frameborder="0"></iframe><br/>
        <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
        <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
    </noscript>     </form> 
</div> 

он размещается внизу страницы, прямо перед тегом, поэтому он не является вложенным или что-то в этом роде.

Как я могу это сделать?

Спасибо

Ответы [ 4 ]

5 голосов
/ 17 января 2011

Если вы планируете использовать reCaptcha во всплывающем диалоге, я настоятельно рекомендую использовать javascript api .Я обнаружил, что FireFox может иметь проблемы с обработкой iframe в таких ситуациях.

После того, как вы получите вызов, чтобы открыть диалоговое окно в клиентском javascript, вы вызываете создание капчи следующим образом:1005 *

Recaptcha.create(YOUR_API_KEY,
    "captcha_contain",
    {
    theme: "red",
    callback: Recaptcha.focus_response_field
    }
);

Где "captcha_contain" - это идентификатор элемента в вашем диалоге, предположительно открытый div.Это также немного изменит ваш серверный код, но вы можете прочитать все об этом в API.

1 голос
/ 16 января 2011

В этой теме предполагается, что это может быть связано с неверным HTML. В этом случае это было потому, что <form> был помещен внутри <table>. Может быть, это ваш случай?

В любом случае, если вы действительно хотите загрузить капчу только в открытом диалоговом окне, вам придется получать контент через AJAX. Используйте событие open в диалоговом окне пользовательского интерфейса jQuery, чтобы решить, когда следует получать вашу капчу. Я не знаком с API reCaptcha, но, возможно, есть Javascript API, в противном случае вам придется позволить вашему PHP-коду отображать эту капчу для вас на отдельной странице (или каким-то образом предоставить ее клиенту). 1009 *

0 голосов
/ 27 июня 2012

Я получил эту проблему, опять же только в FF3.6 при использовании лайтбокса - загрузка div reCatpcha на страницу, но скрытие его до onSubmit формы.

Решил проблему, используя «видимость: скрытый» в форме reCaptcha вместо «display: none».

(Простое исправление, но боль в то время - на всякий случай, если это пригодится кому-то еще :))

0 голосов
/ 03 ноября 2011

У меня была похожая проблема с reCAPTCHA и Firefox 3.6. Кстати, один и тот же код прекрасно работал с IE и Chrome. После долгих отладок (и некоторых советов из ответов выше) я обнаружил, что тег <fieldset> внутри моей формы вызывал сбой jquery.

Простое удаление <fieldset> и ошибка исчезла.

Надеюсь, это поможет другим там.

...