2013-04-18 12 views
5

Używam Awesomium 1.7.0.5 w celu załadowania strony, wypełnienia niektórych pól tekstowych i kliknięcia przycisku. Staram się wypełnić pole tekstowe na przykładzie z tego wątku: http://answers.awesomium.com/questions/857/webcontrol-type-in-webbrowser.htmlAwesomium .NET: Dokument nie jest gotowy w wydaniu DocumentReady?

Tu jest mój kodu (używam kontroli WPF):

 private void WbAwsOnDocumentReady(object sender, UrlEventArgs urlEventArgs) 
     { 
      if (wbAws == null || !wbAws.IsLive) 
       return; 

      //Thread.Sleep(555); 

      dynamic document = (JSObject)wbAws.ExecuteJavascriptWithResult("document"); 

      if (document == null) 
       return; 

      using (document) 
      { 
       dynamic textbox = document.getElementById("email"); 

       if (textbox == null) 
        return; 

       using (textbox) 
       { 
        textbox.value = "gaaffa"; 
       } 

      } 
     } 

To działa, ale tylko z Thread.Sleep do 0,1-0,5 sec. W przeciwnym razie dokument jest pusty (nie ma wartości null) i/lub pole tekstowe ma wartość null. Co mam zrobić? Dlaczego nie jest gotowy w DocumentReadyEvent?

+0

Czy wypróbowałeś imprezę FinishLoading? – KF2

+0

hm ... Nie ma takiego zdarzenia. – AlexP11223

+0

Pracuję z ver 1.6, ma to zdarzenie.Ale możesz sprawdzić, czy dokument == null uruchomić ponownie metodę WbAwsOnDocumentReady, dopóki nie zostanie ustawiona wartość pola tekstowego – KF2

Odpowiedz

4

Oto jak rozwiązać go:

 WbAws.LoadingFrameCompleted += OnLoadingFrameCompleted; 
    WbAws.Source = new Uri("http://google.com"); 

private void OnLoadingFrameCompleted(...) 
{ 
    if (webView == null || !webView.IsLive || 
     webView.ParentView != null || !e.IsMainFrame) 
    return; 

    LoadingFrameCompleted -= OnLoadingFrameCompleted; 

    // do something 
} 

LoadingFrameCompleted zamiast DocumentReady i dlatego, że pożary nie tylko wtedy, kiedy jest to potrzebne, ale również na starcie aplikacji I zapisać się do niego tuż przed nawigacyjnych i wypisać się po niej. Sprawdzam również, czy jest to IsMainFrame.

edycja: ale z tym rozwiązaniem czasami wyrzuca wyjątek, że dokument nie jest gotowy. Czekam więc na to za pomocą Thread.Sleep.

Powiązane problemy