2009-07-16 6 views
0

これはおそらく残念ですが、レンダリングに時間がかかることがあるため、再キャプチャコントロールの場合は可能ですか?可能 - x秒間に読み込まれない場合、ユーザーコントロールのレンダリングをキャンセルしますか?

レンダリングに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

iframeを使用してcaptchaブロックを格納し、readystatechangedイベントまたはlayoutcompleteイベントを購読することができます。あなたは、待つ気になる最大時間後にいくつかのJavaScriptを実行するようにsetTimeout()を使用することができます。また、これらのイベントがどちらも起動していない場合は、DOMからiframeを削除し、独自のものに置き換えます。

+0

ありがとうございます。私はこれを見ていきます。 recaptchaコントロールの奇妙なことは、ロードするのに10秒かかることがあり、画面に何も表示されないことがあります。コントロールに何が入っているのか分からないので、レンダリングを止める方法を理解するのは難しいでしょう。 – Steve

関連する問題