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

问题描述 投票:5回答:2

我正在使用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中没有准备好?

c# .net awesomium
2个回答
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等待它。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.