2009-07-16 6 views
0

Ceci est probablement une alouette, mais pour le contrôle de recaptcha car cela prend parfois beaucoup de temps à rendre, est-ce possible?Possible - annuler le rendu du contrôle utilisateur s'il n'est pas chargé en x secondes?

Si le rendu prend plus de 5 secondes, j'aimerais arrêter le rendu de l'objet et afficher mon propre captcha.

Je commencerais une minuterie au chargement de la page et si 5 secondes se sont écoulées, dans un événement dans le contrôle recaptcha (prerender?), J'annulerais le rendu ou le rendrait invisible ou quelque chose à cet effet. C'est un contrôle utilisateur tiers, donc je n'ai pas la source.

Mise à jour:

J'ai essayé le code ci-dessous après avoir posté. Cela fonctionne en sorte que si le contrôle utilisateur ne peut pas connecter son serveur, c'est-à-dire - je déconnecte ma connexion Internet, mais il ne comprend pas quand il y a une pause vraiment longue quand le contrôle attend le retour du serveur à lui. Même si je change l'intervalle millisecond à 1, le contrôle rend.

<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 

Répondre

1

Vous pourriez être en mesure d'utiliser un iframe pour contenir le bloc captcha et abonnez-vous aux soit les événements readystatechanged ou layoutcomplete. Vous pouvez ensuite utiliser setTimeout() pour planifier l'exécution de JavaScript après la durée maximale d'attente, et si aucun de ces événements n'a été déclenché, supprimez l'iframe du DOM et remplacez-le par le vôtre.

+0

Merci. Je vais jeter un coup d'oeil à ça. La chose étrange avec le contrôle recaptcha est parfois de 10 secondes à charger et rien n'est rendu à l'écran. Ne sachant pas ce qui se passe dans le contrôle, je suppose qu'il serait difficile de comprendre comment arrêter le rendu avant d'arriver à cette phase. – Steve

Questions connexes