GeckoFx45文档标题,正文是空的

问题描述 投票:0回答:1

我正在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访问器)在根(Header,Body)上显示2个孩子,两者都是空:WebDisplay.Document.Body.HasChildNodes = false

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

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

c# winforms geckofx
1个回答
0
投票

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

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

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

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

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