C # WebBrowser.Document.Body.AppendChild не удается добавить новый элемент - PullRequest
0 голосов
/ 11 января 2019

Элемент управления .NET WebBrowser, по-видимому, не имеет метода, позволяющего вставлять html-элементы из их строки в тело документа, поскольку для метода AppendChild требуется тип HtmlElement. В следующем коде я пытаюсь преодолеть это, поскольку Document.Body возвращает тип HtmlElement, поэтому я создаю новый элемент управления WebBrowser, присваивая тексту все тело, а затем получаю результат как HtmlElement.

Контрольный код

public class WebBrowserEx : WebBrowser {

    // method to allow creation of HtmlElement from HTML text
    public HtmlElement CreateElement(string html)
    {
        HtmlElement el;
        using(WebBrowser wb = new WebBrowser())
        {
            wb.Navigate("about:blank");
            try
            {
                if (wb.Document != null) { wb.Document.Write(string.Empty); }
            } catch (InvalidCastException) { }
            wb.Document.Write(html);
            el = wb.Document.Body;
        }
        return el;
    }

    // method to set entire document from HTML text
    public string Html {
        get {
            return DocumentText;
        }
        set{
            Navigate("about:blank");
            try
            {
                if (Document != null) { Document.Write(string.Empty); }
            } catch (InvalidCastException) { }
            wb.Document.Write(html);
        }
    }
}

Пример использования

using System;
using System.Windows.Forms;

public partial class Form1 : Form {
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load( object sender, EventArgs e )
    {
        // create a new instance of the WebBrowserEx control
        WebBrowserEx wbex = new WebBrowserEx();

        // set the document to HTML content
        wbex.Html = "<html><head></head><body></body></html>";

        // create a new element from HTML as string
        HtmlElement el = wbex.CreateElement("<h1>Hello World</h1><br>");

        // append new element to document
        wbex.Document.Body.AppendChild(el);
    }
}

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь добавить этот результат, используя Document.Body.AppendChild, это дает мне следующее исключение:

Значение не попадает в ожидаемый диапазон.

Это также дает то же исключение при попытке вставить элемент, используя

wbex.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterEnd, el);

Изображение исключения

the exception

Примечание

Мне известно о добавлении отдельных элементов, используя Document.CreateElement("A"), где «A» - элемент, однако это не позволяет добавлять блок html, который содержит много элементов. Я также знаю, что могу вставлять JavaScript и запускать его на лету, с помощью которого вы также можете создавать элементы. Мне также известно, что я мог бы просто сохранить свой HTML-код в строке, добавить к нему и затем снова установить html документа, однако это потеряло бы любое существующее состояние или динамические изменения на странице.

Цель состоит в том, чтобы иметь возможность просто добавить блок html из строки в любое место существующего html-документа, который уже загружен непосредственно в элемент управления WebBrowser.

...