2009-07-16 2 views
0

Dies ist wahrscheinlich eine Lerche, aber für die Recaptcha-Kontrolle, wie es manchmal lange dauert, ist das möglich?Möglich - Abbrechen User Control Rendering, wenn nicht in x Sekunden geladen?

Wenn es mehr als 5 Sekunden zum Rendern benötigt, möchte ich das Rendering des Objekts stoppen und mein eigenes Captcha anzeigen.

Ich würde einen Timer beim Laden der Seite starten und wenn 5 Sekunden vergangen sind, würde ich in einigen Fällen im Recaptcha-Steuerelement (Prerender?) Das Rendern abbrechen oder es unsichtbar machen oder etwas in diesem Sinne. Es ist ein Benutzersteuerelement eines Drittanbieters, daher habe ich die Quelle nicht.

Update:

ich den Code unten versucht, nachdem ich gepostet. Es funktioniert irgendwie, wenn das Benutzersteuerelement seinen Server nicht verbinden kann, dh - ich schalte meine Internetverbindung trennen, aber es spürt nicht, wenn es eine wirklich lange Pause gibt, wenn das Steuerelement darauf wartet, dass der Server zurückkommt zu ihm. Selbst wenn ich das Millisekundenintervall auf 1 ändere, rendert das Steuerelement.

<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 

Antwort

1

Sie können hier ein iframe verwenden, um das Captcha-Block enthalten und auf die entweder die readystatechanged oder layoutcomplete Ereignisse abonnieren. Sie könnten dann setTimeout() verwenden, um zu planen, dass einige JavaScript nach der maximalen Zeit, die Sie warten möchten, ausgeführt werden, und wenn keines dieser Ereignisse ausgelöst wurde, entfernen Sie den Iframe aus dem DOM und ersetzen Sie ihn durch Ihr eigenes.

+0

Danke. Ich werde es mir ansehen. Die seltsame Sache mit dem Recaptcha-Steuerelement ist manchmal, dass es 10 Sekunden dauert, um zu laden, und nichts wird auf dem Bildschirm gerendert. Ohne zu wissen, was in die Steuerung fließt, würde es wohl schwierig sein, herauszufinden, wie man das Rendering stoppen kann, bevor es in diese Phase kommt. – Steve