获取GeckoFx firefox浏览器控件iframe html无法访问

时间:2014-01-31 17:02:58

标签: c# iframe geckofx

我使用的是GeckoFX 22 c#网络浏览器控件,但无法管理iframe中的代码。当我检查gecko innerhtml时,似乎虽然iframe标签显示在html中,但它的内容却没有。

这是我用来获取浏览器控件的内部html的代码,它只显示iframe标记为空(当它应该包含其他文档时):

        GeckoHtmlElement element = null;
            var geckoDomElement = webBrowser.Document.DocumentElement;
            if (geckoDomElement is GeckoHtmlElement)
            {
                element = (GeckoHtmlElement)geckoDomElement;
                var innerHtml = element.InnerHtml;
            }

以前我使用类似下面代码的代码来访问单个元素,这些元素工作正常:

GeckoDocument checkDoc = (GeckoDocument)webBrowser.Window.Document;
var x = (checkDoc.GetElementsByTagName("a").Where(b => b.Id == "ipt-form-format-aside").First());

我能够获得单个元素并更改其值/触发事件等,而不会出现主html文档的问题,但iframe中的任何内容都无法获取元素。我想也许Iframe尚未加载或类似的东西。有没有办法强制控件在尝试访问其元素之前等待I帧加载?

2 个答案:

答案 0 :(得分:1)

string content = null;
var iframe = webBrowser.Document.GetElementsByTagName("iframe").FirstOrDefault() as Gecko.DOM.GeckoIFrameElement;
if(iframe != null)
{
    var html = iframe.ContentDocument.DocumentElement as GeckoHtmlElement;
    if (html != null)
        content = html.OuterHtml;
}

答案 1 :(得分:0)

我只是为可能遇到此问题的其他人发布此内容

foreach (GeckoIFrameElement _E in geckoWebBrowser1.Document.GetElementsByTagName("iframe"))
{
    if (_E.GetAttribute("class") == "testClass")
    {
        var innerHTML = _E.ContentDocument;

        foreach (GeckoHtmlElement _A in innerHTML.GetElementsByTagName("input"))
        {
            _A.SetAttribute("value", "Test");
        }
    }
}
相关问题