GeckoFx45文档标题,正文是空的

时间:2017-12-19 07:58:15

标签: c# winforms geckofx

我正在开发VS2017中的winforms项目。我从2017年11月17日起使用Geckofx45版本45.0.33 Nuget包。我已经将项目设置为32位。

初始化程序编码为:

[STAThread]
static void Main()
{
    ...

    Xpcom.Initialize("Firefox");

    ....
} 

主窗体构造函数中的当前概念验证代码目前看起来像这样:

public MainForm(IConfigurationRoot configuration)
{
    InitializeComponent();

    ...

    WebDisplay = new GeckoWebBrowser()
    {
        Dock = DockStyle.Fill
    };

    WebDisplay.Navigate("https://www.google.com/");
    while (WebDisplay.IsBusy)
        Application.DoEvents();

    GeckoHtmlElement payloadElement = WebDisplay
        .Document
        .GetHtmlElementById("viewport");

    ...
}

让我们在这里休息并观察问题。浏览器控件按预期呈现在表单中,显示Google主页。如果我右键单击View Source的控件,我会看到我期望从导航目标获得的html。一切都在UX层中检出。

但是,我需要在DOM中查找,我的查询都将返回null。 GetHtmlElementById不仅没有返回任何内容,进一步探索Document属性(或DomDocument属性,或者我遇到的任何其他DOM访问器)显示2个孩子根(标题,正文),两者都是空的:WebDisplay.Document.Body.HasChildNodes = false

踢球者是,控件显然呈现预期的内容;除了空的Header和Body元素节点之外,它没有显示任何内容的API。

我在这里做错了什么?谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,我能够排除这一个。怀疑,这是一个时间问题。尝试使用IsBusy(我在SO上找到的建议)不足以确保在查询之前加载DOM。

在我的用例中,我需要能够在第一次显示表单时动态地将内容呈现到DOM中。为此,必须使用DocumentCompleted事件:

WebDisplay.DocumentCompleted 
    += new EventHandler<GeckoDocumentCompletedEventArgs>(WebDisplay_DocumentCompleted);

尝试从表单构造函数查询DOM将无法正常工作。干杯!