文档在DocumentReady事件中没有准备好?

时间:2013-04-18 09:18:06

标签: c# .net awesomium

我正在使用Awesomium 1.7.0.5来加载页面,填充一些文本框并单击按钮。我正在尝试使用此主题中的示例填充文本框:http://answers.awesomium.com/questions/857/webcontrol-type-in-webbrowser.html

这是我的代码(我正在使用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"; 
                }

            }
        }

它只能使用Thread.Sleep 0.1-0.5秒。否则,文档为空(非空)和/或文本框为空。 我该怎么办?为什么它没有在DocumentReadyEvent中准备好?

2 个答案:

答案 0 :(得分:5)

以下是我解决它的方法:

     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而不是DocumentReady,因为它不仅在我需要它时触发,而且在应用程序启动时触发我在导航之前订阅它并在之后取消订阅。还要检查它是IsMainFrame。

编辑:但是使用此解决方案,它有时会抛出文档尚未就绪的异常。所以我也在使用Thread.Sleep等待它。

答案 1 :(得分:0)

很老的问题。但对于像我这样的人来说,面对这个问题 - 使用LoadingFrameCompletedWebControl.IsNavigating == false条件的e.IsMainFrame == true事件。 如果在这个事件中这些条件成立,则页面加载完毕,您就可以获得HTML内容了。