Возможно - отменить рендеринг пользовательского элемента управления, если он не загружен за x секунд? - PullRequest
0 голосов
/ 16 июля 2009

Это, вероятно, жаворонок, но возможно ли это для контроля рекаптчи, который иногда занимает много времени?

Если рендеринг занимает более 5 секунд, я бы хотел остановить рендеринг объекта и отобразить мою собственную капчу.

Я бы запустил таймер при загрузке страницы, и если через 5 секунд в каком-то случае в элементе управления recaptcha (prerender?) Я бы отменил рендеринг или сделал его невидимым или что-то в этом роде. Это сторонний пользовательский элемент управления, поэтому у меня нет источника.

Обновление:

Я попробовал код ниже после того, как отправил. Это работает в том смысле, что если пользовательский элемент управления не может подключиться к своему серверу, то есть - я отключаю свое интернет-соединение, но не имеет смысла, когда действительно длинная пауза, когда элемент управления ожидает возвращения сервера. к этому. Даже если я изменю интервал в миллисекундах на 1, элемент управления будет отображаться.

<MTAThread()> _
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        Dim ucChk As New UCExistenceChecker(recaptcha, Me)
        Dim doFindUC As System.Threading.TimerCallback = AddressOf ucChk.FindUC
        Dim stateTimer As System.Threading.Timer = New System.Threading.Timer(doFindUC, Nothing, 0, 5000)
    End If

End Sub

Public Class UCExistenceChecker

    Dim _r As Recaptcha.RecaptchaControl
    Dim _pg As Page

    Sub New(ByVal r As Recaptcha.RecaptchaControl, ByVal pg As Page)
        _r = r
        _pg = pg
    End Sub

    Sub FindUC(ByVal stateInfo As Object)
        If _pg.FindControl("recaptcha") Is Nothing Then
            _r.SkipRecaptcha = True  'This "unrenders" the control, sort of.
        End If
    End Sub

End Class

1 Ответ

1 голос
/ 16 июля 2009

Возможно, вы сможете использовать iframe для хранения блока капчи и подписаться на события readystatechanged или layoutcomplete. Затем вы можете использовать setTimeout (), чтобы запланировать выполнение некоторого JavaScript-кода после максимального времени ожидания, и если ни одно из этих событий не сработало, удалите iframe из DOM и замените его своим собственным.

...