Главная » Silverlight » Анализ документа HTML

0

Извлечение информации о браузере и навигация — относительно простые задачи. Более интересные проблемы возникают, когда нужно проанализировать структуру стра­ницы HTML, хостирующей содержимое Silverlight.

Анализ начинается с использования двух статических свойств класса HtmlPage. Свойство Plugin содержит ссылку на элемент <object>, который представляет элемент управления Silverlight как объект HtmlElement. Свойство Document предоставляет объект HtmlDocument, который представляет всю страницу с набором членов страницы вклю­чительно (табл. 14.2).

Таблица 14.2. Члены класса HtmlDocument

Имя

Описание

DocumentUri

Адрес URL текущего документа как объект Uri

QueryString

Часть строки запроса URL

DocumentElement

Объект HtmlElement, представляющий верхнеуровневый элемент <html> страницы HTML

Body

Объект HtmlElement, представляющий элемент <body> страницы HTML

Cookies

Коллекция всех текущих файлов cookie. Файлы cookie можно читать и редактировать. Файлы cookie предоставляют удобный способ передачи информации между серверным кодом ASP.NET и клиентским кодом Silverlight. Однако редактирование файлов cookie — не лучший способ сохранения небольшого объема данных на клиентском компьютере; для этого специально предназначены изолированные хранилища (см. главу 18), обеспечивающие лучшую совместимость и поддерживающие интеграцию с кодом приложения

CurrentBookmark

Часть адреса URL, являющаяся закладкой и указывающая на заданный анкер страницы. Метод NavigateToBookmarkO можно использовать для перехода к другой закладке

IsReady

Это свойство равно true, если браузер не занят, и false, если страница все еще загружается

CreateElement()

Новый объект HtmlElement, представляющий динамически созданный элемент HTML, который можно вставить на страницу

AttachEvent() и DetachEvent ()

Подключение обработчика, определенного в приложении Silverlight, к событию JavaScript, генерируемому документом, и его отключение

Submit ()

Передача страницы путем передачи формы и данных на сервер. Этот метод полезен, когда элемент управления Silverlight хостируется страницей ASP. NET, потому что он передает обратный запрос, позволяющий запустить выполнение серверного кода

Имея объект HtmlDocument, представляющий страницу, можно спуститься вниз по дереву элементов, начиная с HtmlDocsument.DocumentElement или HtmlDocument.Body. Для перехода от одного элемента к другому используется свойство Children, содержа­щее элементы, вложенные в текущий элемент, или свойство Parent, содержащее роди­тельский элемент.

На рис. 14.2 показано приложение Silverlight, которое начинает просмотр с верх- неуровневого элемента <html> и применяет рекурсивный метод для прохода вниз по странице. Приложение выводит имя и атрибут id каждого элемента.

Ниже приведен код, создающий рис. 14.2 при первой загрузке страницы.

private void UserControl_Loaded(object sender,

RoutedEventArgs e)

// Начало обработки верхнеуровневого элемента <html>

Рис. 14.2. Синтаксический разбор текущей страницы

HtmlElement element = HtmlPage.Document.DocumentElement; ProcessElement(element, 0) ;

}

private void ProcessElement(HtmlElement element, int indent)

{

/ / Пропуск комментариев if (element.TagName == "!") return;

// Создание отступов, обозначающих уровни вложенности lblElementTree.Text += new String(1 ‘, indent * 4);

// Вывод имени дескриптора

lblElementTree.Text += "<" + element.TagName;

// Вывод атрибута id (если он установлен) if (element.Id != "") lblElementTree.Text += " id=\"" + element.Id +

lblElementTree.Text += ">\n";

// Обработка всех элементов, вложенных в текущий элемент

foreach (HtmlElement childElement in element.Children) {

ProcessElement(childElement, indent + 1) ;

}

}

Элемент HtmlElement предоставляет несколько свойств. Кроме Children и Parent, позволяющих переходить к другим элементам, он предоставляет свойства TagName Hid, продемонстрированные в предыдущем примере, и свойство CssClass, указывающее на имя стиля CSS, установленного посредством атрибута класса и применяемого для кон­фигурирования внешнего вида текущего элемента. Для получения дополнительной ин­формации об элементе можно применить один из методов класса HtmlElement, который рассматривается в следующем разделе.

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии