MutationObserver – Мониторинг изменений DOM в HTML

Что такое Mutation Observer?

Mutation Observer – это встроенный объект, который отслеживает изменения дерева DOM и вызывает или запускает функцию обратного вызова, чтобы реагировать на изменения в DOM. Отслеживание изменений в дереве DOM периодически необходимо для сложных веб-приложений и фреймворков. С помощью Mutation Observer вы можете отслеживать изменения в определенных узлах, атрибутах или дочерних элементах документа и выполнять пользовательские функции, реагирующие на эти изменения.

В библиотеке Aspose.HTML for .NET механизм наблюдения за документом представлен с помощью MutationObserver, который дает возможность получать уведомления о любых изменениях в дереве документов. В этой статье на примерах C# показано, как можно использовать класс MutationObserver для наблюдения за изменениями в DOM.

Как использовать Mutation Observer

Mutation Observer предоставляет возможность наблюдать за изменениями в дереве DOM веб-страницы. В следующем примере демонстрируется реализация MutationObserver и его использование для наблюдения за добавлением новых узлов в документ:

  1. Создайте новый экземпляр класса HTMLDocument, используя конструктор HTMLDocument(). Этот класс представляет HTML-документ в памяти, который можно анализировать и изменять.
  2. Создайте новый объект MutationObserver с помощью конструктора MutationObserver(callback). Функция «callback» принимает в качестве параметров mutations (список объектов MutationRecord) и mutationObserver (объект MutationObserver, обнаруживший мутации).
  3. Используйте конструктор MutationObserverInit(), чтобы создать объект MutationObserverInit для настройки параметров MutationObserver. Другими словами, вы можете указать, какие изменения следует обнаруживать. Например, в примере свойствам ChildList, Subtree и CharacterData присвоено значение true:
    • ChildList обнаруживает изменения в прямых дочерних элементах targetNode.
    • Subtree обнаруживает изменения во всех потомках узла.
    • CharacterData используется для наблюдения за изменениями в текстовом содержании.
  4. Вызовите метод Observe(target, options), чтобы наблюдать за изменениями DOM. Этот метод принимает document.Body в качестве target узла для наблюдения и объект config в качестве options для наблюдения.
  5. Отредактируйте HTML-документ:
    • используйте метод CreateElement() класса HTMLDocument, чтобы создать новый элемент <p>, и используйте метод AppendChild(), чтобы добавить его в тело документа.
    • используйте метод CreateTextNode() класса HTMLDocument, чтобы создать текстовый узел с содержимым «Hello World», и используйте метод AppendChild(), чтобы добавить его в качестве дочернего узла к элементу <p>.
  6. Как только происходит изменение дерева DOM, например, добавление элемента <p> и текстового узла в данном случае, функция «обратного вызова» MutationObserver запускается и выводит на консоль сообщение, указывающее, какой узел был добавлен в документ.

Если вы наблюдаете за изменениями узла, ваш обратный вызов не будет запущен до тех пор, пока DOM полностью не завершит изменение. Это поведение было разработано, чтобы заменить события мутации DOM и уменьшить проблему производительности уничтожения в предыдущей спецификации.

 1// Use Mutation Observer to watch for new nodes added to a document with C#
 2
 3// Create an empty HTML document
 4using (HTMLDocument document = new HTMLDocument())
 5{
 6    // Create a mutation observer instance
 7    Html.Dom.Mutations.MutationObserver observer = new Html.Dom.Mutations.MutationObserver((mutations, mutationObserver) =>
 8    {
 9        foreach (MutationRecord record in mutations)
10        {
11            foreach (Node node in record.AddedNodes)
12            {
13                Console.WriteLine("The '" + node + "' node was added to the document.");
14            }
15        }
16    });
17
18    // Configuration of the observer
19    MutationObserverInit config = new Html.Dom.Mutations.MutationObserverInit
20    {
21        ChildList = true,
22        Subtree = true,
23        CharacterData = true
24    };
25
26    // Pass in the target node to observe with the specified configuration
27    observer.Observe(document.Body, config);
28
29    // Now, we are going to modify DOM tree to check
30    // Create a paragraph element and append it to the document body
31    Element p = document.CreateElement("p");
32    document.Body.AppendChild(p);
33
34    // Create a text and append it to the paragraph
35    Text text = document.CreateTextNode("Hello, World");
36    p.AppendChild(text);
37
38    Console.WriteLine("Waiting for mutation. Press any key to continue...");
39    Output.ToString();
40}

Aspose.HTML предлагает бесплатные Приложения HTML, которые представляют собой онлайн-коллекцию конвертеров, слияний, загрузчиков, инструментов SEO, генераторов кода HTML, инструменты URL и многое другое. Приложения работают в любой операционной системе с веб-браузером и не требуют установки дополнительного программного обеспечения. Легко конвертируйте, объединяйте, кодируйте, генерируйте HTML-код, извлекайте данные из Интернета или анализируйте веб-страницы с точки зрения SEO, где бы вы ни находились. Используйте нашу коллекцию веб-приложений HTML, чтобы выполнять повседневные задачи и сделать свой рабочий процесс безупречным!

Text “Веб-приложения HTML”

Close
Loading

Analyzing your prompt, please hold on...

An error occurred while retrieving the results. Please refresh the page and try again.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.