1. Главная страница » Компьютеры

Internetexplorer application свойства и методы

Автор: | 16.12.2019
Программирование системы 27.07.2016 14:00 3901

Web страницу в 1С Предприятии можно запросить разными способами. На встроенном языке 1С есть специальные объекты для работы с Интернетом.

Для запроса HTML страницы предназначен объект HTTPСоединение. Данный объект обладает широким набором методов и свойств, благодаря чему можно выполнять сложные запросы страниц через Интернет. С помощью HTTPСоединение отправляются POST и GET запросы.

Благодаря COM технологии есть возможность запрашивать web страницы через сторонние объекты. Одним из популярных, является COM объект WinHTTP.WinHttpRequest. Он позволяет отправлять как POST так и GET запросы.

Кроме всех перечисленных выше способов получить web страницу, так же можно с помощью COM объекта "InternetExplorer.Application". Данный объект принадлежит браузеру InternetExplorer в операционной системе Windows. При работе с InternetExplorer.Application можно программно запрашивать страницы и выполнять различные действия с HTML страницами.

Запрос страницы через InternetExplorer.Application

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

1. Создание объектов

Internet Explorer включает два ActiveX-объекта: WebBrowser Object и InternetExplorer Object. Элемент управления WebBrowser может быть интегрирован непосредственно в форму VB или размещён на Web-странице, а объект InternetExplorer доступен только через механизм OLE Automation. Функциональность WebBrowser меньше по сравнению с функциональностью InternetExplorer. Упрощенно говоря, WebBrowser — это собственно окно просмотра документа в браузере, а InternetExplorer — это весь браузер, включая меню, панели инструментов, строку состояния и прочее. Оба объекта находятся в библиотеке "Microsoft Internet Controls" (shdocvw.dll в каталоге system32). Также может пригодиться библиотека "Microsoft HTML Object Library" (mshtml.dll там же) — это именно та среда, с которой оперируют скрипты на языках JavaScript и VBScript на Web-страницах. Примечание: приведённое ниже описание свойств, методов и событий не является до конца исчерпывающим (исчерпывающее описание можно найти в MSDN) и предназначено, в первую очередь, для работы с обозревателем как с OLE-Automation сервером из различных скриптовых сред или Visual Basic.

Читайте также:  Created tmp disk tables

Пример создания OLE-объекта InternetExplorer:

Пример размещения ActivX-объекта WebBrowser на Web-странице:

2. Свойства

Применение некоторых свойств — см. Примеры кода.

Свойство Описание Доступно Application Возвращает сам объект. Только чтение. InternetExplorer, WebBrowser Visible Управляет видимостью окна обозревателя (булево). Чтение и запись. По умолчанию — False. InternetExplorer, WebBrowser AddressBar Управляет отображением адресной строки обозревателя (булево). Чтение и запись. По умолчанию — True. InternetExplorer MenuBar Управляет отображением строки меню обозревателя (булево). Чтение и запись. По умолчанию — True. InternetExplorer ToolBar Управляет отображением панелей инструментов обозревателя (булево). Чтение и запись. По умолчанию — True. InternetExplorer StatusBar Управляет отображением строки состояния обозревателя (булево). Чтение и запись. По умолчанию — True. InternetExplorer FullScreen Управляет отображением окна обозревателя в полный экран (булево). Чтение и запись. По умолчанию — False. InternetExplorer TheaterMode Управляет отображением окна обозревателя в режиме театра (булево). Чтение и запись. По умолчанию — False. Примечание: переход в режим театра и обратно интерактивно осуществляется с помощью команды меню "Вид" — "Во весь экран" или клавишей "F11". InternetExplorer Resizable Управляет возможностью изменения размеров окна обозревателя (булево). Чтение и запись. По умолчанию — True. InternetExplorer Silent Управляет возможностью выдачи обозревателем диалоговых окон о критических ошибках и сообщений безопасности (булево). Чтение и запись. По умолчанию — False (диалоговые окна не запрещены). InternetExplorer, WebBrowser Offline Управляет переводом обозревателя в режим Offline (булево). Чтение и запись. По умолчанию — False. В режиме Offline обозреватель принудительно отдаёт предпочтение чтению HTML-страниц из локального кэша. InternetExplorer, WebBrowser RegisterAsBrowser Управляет регистрацией объекта как "top-level browser" (булево). Чтение и запись. По умолчанию — False. Архитектура Microsoft Internet Explorer допускает наличие нескольких экземпляров объекта WebBrowser. Например, веб-страница с фреймами может содержать объект WebBrowser для каждого фрейма. Термин "top-level" означает объект WebBrowser, который является родительским для всех других объектов WebBrowser. InternetExplorer, WebBrowser Parent Возвращает ссылку на родительский объект. Только чтение. InternetExplorer, WebBrowser Container Возвращает ссылку на объект-контейнер. Только чтение. InternetExplorer, WebBrowser TopLevelContainer Возвращает признак того, является ли объект "top-level" контейнером (булево). Только чтение. InternetExplorer, WebBrowser RegisterAsDropTarget Управляет регистрацией объекта как принимающего данные при операциях "drag-and-drop" (булево). Чтение и запись. По умолчанию — False. InternetExplorer, WebBrowser StatusText Устанавливает или возвращает текст строки состояния обозревателя. Чтение и запись. InternetExplorer Height Управляет высотой окна обозревателя (в пикселах). Чтение и запись. InternetExplorer, WebBrowser Width Управляет шириной окна обозревателя (в пикселах). Чтение и запись. InternetExplorer, WebBrowser Top Управляет положением верхнего края окна обозревателя. Чтение и запись. InternetExplorer, WebBrowser Left Управляет положением левого края окна обозревателя. Чтение и запись. InternetExplorer, WebBrowser Name Возвращает имя объекта, в котором содержится элемент управления WebBrowser. Только чтение. InternetExplorer FullName Возвращает полный путь к исполняемому файлу Microsoft Internet Explorer. Только чтение. InternetExplorer Path Возвращает полный путь к каталогу исполняемомого файла Microsoft Internet Explorer. Только чтение. InternetExplorer Type Возвращает тип объекта, содержащегося в документе (строка). Только чтение. InternetExplorer, WebBrowser LocationName Возвращает имя отображаемого в данный момент ресурса (строка). Только чтение. Если отображается HTML-страница, имя ресурса — заголовок этой страницы. Если отображается папка или файл, имя ресурса — полный путь в UNC-формате. InternetExplorer, WebBrowser LocationURL Возвращает URL отображаемого в данный момент ресурса (строка). Только чтение. Если отображается папка или файл, URL ресурса — полный путь в UNC-формате. InternetExplorer, WebBrowser HWND Возвращает handle главного окна Microsoft Internet Explorer (целое число, Long). Только чтение. InternetExplorer Busy Возвращает булево значение, сигнализирующее о том, занят ли объект операцией навигации или скачивания. Только чтение. Если объект занят, можно применить метод Stop для прерывания операции. InternetExplorer, WebBrowser ReadyState Возвращает значение, сигнализирующее состояние готовности объекта. Только чтение. Возможные значения: 0 — не инициализирован, 1 — загрузка, 2 — загрузка завершена, 3 — доступны не все данные (это то состояние, когда браузер позволяет просматривать страницу в интерактивном режиме, хотя загружены ещё не все компоненты; начиная с этого момента HTML-код вполне пригоден для обработки), 4 — готово. InternetExplorer, WebBrowser Document Возвращает объект документа (объект, функционально эквивалентный объекту документа, используемому в скриптах на Web-страницах). Только чтение. InternetExplorer, WebBrowser

3. Методы

Применение некоторых методов — см. Примеры кода.

Метод Описание Доступно
Stop Отменяет любую незаконченную операцию навигации или скачивания и останавливает любые динамические элементы страницы, такие, как фоновую музыку и анимацию. InternetExplorer, WebBrowser
Quit Закрывает объект. InternetExplorer
ExecWB Выполняет команду и возвращает статус выполнения. Подробнее. InternetExplorer, WebBrowser
QueryStatusWB Возвращает статус указанной команды. Подробнее. InternetExplorer
ShowBrowserBar Показывает или скрывает указанную панель обозревателя. Подробнее. InternetExplorer
ClientToWindow Конвертирует клиентские координаты точки (от левого верхнего угла клиентской области окна) в координаты окна (от левого верхнего угла окна). Первый параметр — целое число, х-координата точки в клиентской области, после вызова ClientToWindow содержит х-координату точки в координатах окна. Второй параметр — аналогично, y-координата. InternetExplorer
GoBack Осуществляет навигацию на один шаг назад по истории. InternetExplorer, WebBrowser
GoForward Осуществляет навигацию на один шаг вперёд по истории. InternetExplorer, WebBrowser
GoHome Осуществляет навигацию на домашнюю страницу. InternetExplorer, WebBrowser
GoSearch Осуществляет навигацию на страницу поиска. InternetExplorer, WebBrowser
Navigate Осуществляет навигацию к указанному ресурсу. Подробнее. InternetExplorer, WebBrowser
Navigate2 Аналогичен методу Navigate, но параметр PostData имеет тип массива SAFEARRAY. Кроме того, ресурс может быть представлен в виде PIDL (Pointer to an Item Identifier List) в пространстве имён оболочки Windows. InternetExplorer, WebBrowser
Refresh Обновляет (перезагружает) страницу. Чтобы избежать обновления ресурса из дискового кэша браузера, следует использовать соответствующие параметры при предшествующих вызовах методов Navigate или Navigate2. InternetExplorer, WebBrowser
Refresh2 Аналогичен методу Refresh, но имеет единственный необязательный параметр, который задаёт "уровень" обновления. Подробнее. InternetExplorer, WebBrowser

3.1. Метод ExecWB

Выполняет команду и возвращает статус выполнения. Доступен в InternetExplorer и WebBrowser.

    Cmd > Некоторые возможные значения параметра "CmdID" (подробнее — см. в MSDN описание "OLECMDID enumeration"):

1 Меню "Файл" — "Открыть. ".
4 Меню "Файл" — "Сохранить как. ".
6 Меню "Файл" — "Печать. ".
7 Меню "Файл" — "Предварительный просмотр. ".
8 Меню "Файл" — "Параметры страницы. ".

Возможные значения параметра "CmdExecOpt":

0 Команда исполняется так, как принято по умолчанию.
1 Перед выполнением выводится окно диалога или дополнительных настроек.
2 Не запрашивать ввод пользователя (не задается никаких вопросов).
3 Выводится справка по запрошенному действию, но сама команда не выполняется.

3.2. Метод QueryStatusWB

Возвращает статус указанной команды. Доступен в InternetExplorer.

    Cmd > Возможные значения флагов в возвращаемом значении (возвращаемое значение — сумма флагов):

1 Команда поддерживается.
2 Команда доступна и разрешена.
4 Команда является переключателем и в данный момент включена.
8 Команда зарезервирована для будущего использования.

3.3. Метод ShowBrowserBar

Показывает или скрывает указанную панель обозревателя. Доступен в InternetExplorer.

    vCls > Некоторые возможные значения параметра "vClsID":

Search
Favorites
History
Folders

3.4. Метод Navigate

Осуществляет навигацию к указанному ресурсу (инициирует операцию открытия документа). Доступен в InternetExplorer и WebBrowser.

  1. Url — строка, определяющая URL или полный путь к файлу.
  2. Flags — необязательный. Набор флагов, определяющий, нужно ли добавлять ресурс в историю, записывать/читать ресурс в/из кэша, отображать ресурс в новом окне.
  3. TargetFrameName — необязательный. Строка, имя фрейма HTML, в котором следует отобразить ресурс. Если такого фрейма не существует, откроется новое окно.
  4. PostData — необязательный. Позволяет передать на Web-сервер данные, полученные в результате заполнения формы, если этот сервер требует HTTP — транзакции POST. Если этот параметр не определён, метод осуществляет HTTP GET транзакцию. Если указанный Url — не HTTPURL, параметр игнорируется.
  5. Headers — необязательный. Значение, определяющее дополнительные HTTP заголовки для отправки на сервер. Эти заголовки добавляются к заголовкам Microsoft Internet Explorer по умолчанию. Заголовки могут определять тип данных, код состояния и т.п. Если указанный Url — не HTTPURL, параметр игнорируется.

Возможные значения флагов параметра "Flags":

1 navOpenInNewWindow. Открыть ресурс в новом окне.
2 navNoHistory. Не добавлять ресурс в историю просмотренных. Текущая страница добавляется в историю.
4 navNoReadFromCache. Не загружать страницу из кэша.
8 navNoWriteToCache. Не сохранять страницу в кэше.
16 navAllowAutosearch. Если навигация не удалась, осуществляется попытка навигации к корневому домену (.com, .edu и т.д.). Если и эта попытка не удалась, запускается поиск.
32 navBrowserBar. Пытается использовать для навигации текущую панель браузера, если это возможно.
64 navHyperlink. Если навигация не удалась, следуя гиперссылке, ресурс будет связан с псевдонимом с использованием флага BINDF_HYPERLINK.

Возможные значения параметра "TargetFrameName" (кроме собственно имени конкретного фрейма):

_BLANK Загружать ресурс в новое безымянное окно.
_SELF Загружать документ в тот же фрейм, в котором находится ссылающийся на него документ.
_PARENT Загружать документ в непосредственный родительский фрейм этого фрейма в наборе фреймов FRAMESET. Это значение эквивалентно _SELF, если текущий фрейм не имеет родительского фрейма.
_TOP Загружать документ в полное окно (закрывая все остальные фреймы). Это значение эквивалентно _SELF, если у текущего фрейма нет родительского фрейма.

3.5. Метод Refresh2

Аналогичен методу Refresh, но имеет единственный необязательный параметр, который задаёт "уровень" обновления. Заголовок "pragma:nocashe" запрещает серверу возвращать кэшированную копию документа, обеспечивая самую свежую информацию, однако этот заголовок может послужить причиной проблем на некоторых серверах.

Особенности задачи

Web-страницы представляют собой очень привлекательный источник информации. Можно привести множество примеров, когда целесообразно в автоматическом режиме осуществлять серфинг по страницам Всемирной Паутины, с тем чтобы извлекать необходимые сведения. Например, можно следить за появлением новых ссылок по интересующему предмету, сканируя страницы, генерируемые различными поисковыми системами; можно регистрировать новые сведения, появляющиеся на страницах конкурирующих компаний; можно извлекать мировые новости и генерировать собственные дайджесты; можно фильтровать и преобразовывать необходимую информацию для компонентов Web Parts собственных настраиваемых решений Digital Dashboard.

Для всего этого вполне подходит любое приложение Microsoft Office. Так, для работы со ссылками или числовыми показателями удобно импортировать информацию из Internet прямо на рабочие листы Excel. Тексты можно записывать в документы Word, компоненты Web Parts генерировать непосредственно из Outlook. А реализовать задуманное, как всегда, поможет VBA. Для этого необходимо научиться программным путем запускать Internet Explorer из приложений Office.

В отличие от других задач связывания различных приложений работа с Internet Explorer имеет ряд особенностей. Общая схема «создать объект Application => открыть документ => выполнить обработку => закрыть документ и приложение» в случае с Internet Explorer неприменима. Для документов Internet Explorer не существует метода Open. Вместо этого используется метод Navigate, который только инициирует операцию открытия документа. Каждый, кто работал с браузерами Internet, не мог не заметить, что эти приложения работают в фоновом режиме, оставляя массу свободного времени для других программ. То же самое происходит и при запуске Internet Explorer из Microsoft Office. Internet Explorer немедленно возвратит управление вызывающему модулю, хотя до окончания загрузки необходимого документа еще далеко. Чтобы не заблокировать систему, необходимо решить задачу синхронизации параллельно работающих приложений. Обычно для этой цели в VBA используется таймер в сочетании с функцией DoEvents, передающей управление операционной системе для обработки событий и выполнения других программ. В языке VB подобные действия проще выполнить с помощью функции Sleep.

Вторая особенность использования Internet Explorer заключается в многообразии библиотек, содержащих компоненты необходимой объектной модели. Одинаковых результатов можно достигнуть с помощью различных инструментов, поэтому прежде всего следует ознакомиться с составом той или иной библиотеки, доступными свойствами, методами и событиями для одноименных объектов.

В описываемом примере используются две самые распространенные библиотеки, обычно расположенные в папке C:WINDOWSSYSTEM, а именно: Microsoft Internet Controls (SHDOCVW.DLL) и Microsoft HTML Object Library (MSHTML.DLL). Для того чтобы описанные ниже процедуры выполнялись, необходимо в проекте VBA отметить применение указанных библиотек. Это достигается с помощью команды «Сервис. Ссылки…», выбираемой в меню редактора VBA.

Обращение к Internet Explorer

Как уже отмечалось, при работе с Internet Explorer необходимо позаботиться о синхронизации параллельных процессов. Рекомендуемым этапом решения подобной задачи является построение специального класса, позволяющего использовать события внешнего приложения. Для этого в VBA-проекте следует создать новый модуль класса и описать в нем объектную переменную с ключевым словом WithEvents, после чего в списке процедур для описанного объекта появятся все предусмотренные события. Объект Internet Explorer имеет изрядное количество событий, не в пример объектам Application приложений Microsoft Office. Для целей нашего примера достаточно использовать одно-единственное событие — DocumentComplete. Это событие возникает, когда какой-либо документ полностью загружен и в строке состояния Internet Explorer появляется знакомое всем сообщение «Готово». Соответствующий модуль класса показан ниже:

После того как объект Internet Explorer надлежащим образом определен, можно перейти к процедурам главного модуля проекта. Поскольку предполагается параллельная работа, не обойтись без глобальных переменных, служащих для хранения информации между вызовами процедур. В нашем случае их три:

Первая переменная — это указатель на открытый экземпляр Internet Explorer. Вторая переменная — флаг открытого состояния, введена для реализации в среде VBA Office’97, где по непонятной причине отсутствует, хотя и упоминается в справочной системе, функция IsNothing, проверяющая связь ссылочной переменной с реальным объектом. Назначение третьей, строковой, переменной будет понятно из дальнейшего изложения.

После определения необходимых переменных можно приступить к программированию процедур, первая из которых создает новый экземпляр приложения Internet Explorer:

При открытии Internet Explorer устанавливаются два свойства: Silent и Visible. Свойство Silent разрешает или запрещает диалоговое общение Internet Explorer с пользователем, а свойство Visible определяет видимость окна Internet Explorer на экране дисплея. По умолчанию Internet Explorer запускается невидимым.

Вторая процедура выполняет прямо противоположные действия. Internet Explorer закрывается с помощью метода Quit, объектная переменная освобождается, и флаг открытого состояния сбрасывается:

Третья процедура выполняет более содержательную работу — инициирует поиск и загрузку необходимой Web-страницы. Как уже отмечалось выше, загрузка страницы только «заказывается», а что произойдет в действительности — зависит от состояния компонентов сети. На всякий случай «заказанный» URL (Uniform Resource Locator — стандартизованная строка символов, указывающая местонахождение документа в Internet) страницы запоминается в глобальной переменной. Это позволит в дальнейшем проверить, та ли страница открыта. Обратите внимание на параметры, которые передаются процедуре обработки события DocumentComplete. Один из этих параметров — URL открытой страницы. Именно его следует сравнивать с исходным значением. Здесь, как говорится, возможны варианты. Причина несоответствия URL заключается не только в отсутствии нужной страницы или отказе сервера. Проблемы возникают и при открытии страниц с фреймами. Так, например, если необходимая страница содержит три фрейма, то состояние DocumentComplete возникает целых семь раз: три раза с пустым значением URL в процессе разметки, три раза со значением URL страниц, загружаемых во фреймы, и наконец, со значением URL страницы, указанной при вызове метода Navigate.

Есть еще одна особенность, которую следует учитывать при сравнении URL. В строковом параметре URL метода Navigate необходимо обязательно указывать протокол в виде http://, ftp:// или file://, если вдруг понадобится открыть документ на локальном компьютере. В последнем случае префикс file://, при возникновении события DocumentComplete, будет опущен. Процедура, предусматривающая этот нюанс, приведена ниже.

Обработка HTML-документа

Все рассмотренные выше процедуры имеют общий характер и могут использоваться в разных приложениях в неизменном виде. Обработка загруженной Web-страницы зависит от конкретных потребностей. Ниже будут показаны только начальные возможности. Прежде всего следует уяснить, что введенный объект Internet Explorer построен на основе объектной модели Microsoft Internet Controls, которая не содержит каких-либо средств доступа непосредственно к содержимому документа. Свойство InternetExplorer.Document предоставляет только ссылку на некий обобщенный объект, не имеющий собственных свойств и методов. Очевидно, это сделано потому, что компонент Microsoft Internet Controls предназначен для реализации различных протоколов Internet, а не для работы с документами. Поэтому первое, что необходимо сделать, это обеспечить процедуру обработки необходимой объектной моделью документа.

Раз уж речь зашла о Web-страницах, то в качестве объектной модели следует использовать Microsoft HTML Object Library, то есть именно ту среду, с которой оперируют скрипты на языках JavaScript и VBScript, создаваемые Web-программистами.

В нашем случае процедура обработки документа вызывается обработчиком события DocumentComplete из модуля класса Internet Explorer With Events. Это означает, что некий документ полностью загружен и самое время создавать нужный объект. Создание объекта выполняется традиционно. Используются описание объектной переменной класса HTMLDocument и инструкция Set, присваивающая объектной переменной ссылку на объект, адресуемый свойством Document объекта Internet Explorer. Все остальные объявления зависят от конкретного применения процедуры. В приведенном ниже примере дополнительно описана объектная переменная класса HTMLLinkElement, обеспечивающая доступ к семейству гиперссылок. В начале процедуры выполняется сравнение URL (необходимость которого была обоснована выше):

В рассмотренной процедуре обработки документа выполняется хорошо знакомая всем офисным программистам конструкция For Each… Next. С помощью этой конструкции осуществляется просмотр всего множества ссылок в документе с целью выделения и печати ссылок с полным URL. Нечто подобное можно использовать и при анализе страниц порталов и поисковых систем.

После цикла обработки ссылок помещены два оператора, печатающие различные представления документа в целом. Аналогичные свойства можно использовать для разбора как текста, так и HTML-кода, с помощью собственного алгоритма.

Реализация процесса

Представленные выше четыре процедуры составляют основу механизма взаимодействия проекта Office с Internet Explorer. Эти процедуры открывают приложение Internet Explorer, запускают процесс навигации, обрабатывают полученный результат и закрывают приложение. При этом процессы навигации и обработки могут повторяться многократно — сообразно интересам пользователя. Список URL открываемых страниц можно задавать заранее или формировать динамически, основываясь на анализе данных, полученных при обработке предшествующих страниц. Можно даже определенным образом повторить работу таких приложений, как Teleport Pro, скачивающих из сети целые сайты.

Как бы то ни было, совершенно очевидно, что для создания работающего проекта необходима еще одна программа, осуществляющая планирование и диспетчеризацию обращения к перечисленным процедурам. Необходимость в такой внешней программе мониторе вызвана еще и тем, что в процессе задействованы ненадежные компоненты и оплачиваемые средства коммуникации. Вряд ли следует, запустив навигацию, беспечно ожидать непременного наступления события DocumentComplete. Весь опыт работы с Internet в интерактивном режиме свидетельствует об обратном. Поэтому при разработке монитора необходимо позаботится о постоянном контроле над состоянием в режиме online и предусмотреть переключение процедур, если загрузка очередной страницы затягивается сверх установленного лимита времени.

Если попытаться сформулировать требования к монитору, то получится, что эта программа должна обеспечивать следующие функции:

  • открывать и закрывать Internet Explorer, в том числе и по желанию пользователя;
  • хранить и обновлять список URL, запланированных для обработки;
  • хронометрировать продолжительность загрузки отдельной страницы и всего сеанса работы с Internet;
  • запускать очередной процесс навигации как после завершения обработки очередной страницы, так и по истечении заданного лимита времени;
  • переключать режим визуального отображения окна Internet Explorer;
  • отображать состояние процесса загрузки очередной страницы.

К этим требованием можно добавить и ведение протокола процесса, если, конечно, процедуры обработки не предусматривают вывод результатов непосредственно в открытые документы Office.

Совершенно очевидно, что для удовлетворения всех требований вполне подходит форма VBA c обычными элементами управления, оснащенная таймером. Пример такой формы приведен на рисунке.

Список URL хранится в элементе управления ListBox, что позволяет управлять им проще, чем в случае использования динамических массивов. Элементы управления CheckBox напрямую связаны с соответствующими свойствами объекта InternetExplorer. Запуск и остановка процесса выполняются с помощью командных кнопок. Время и состояние отображаются в обычных окнах TextBox. При этом номер шага и общее количество шагов берутся непосредственно из свойств ListIndex и ListCount списка URL. Наглядности ради продолжительность загрузки страницы изображается в виде имитации элемента ProgressBar.

Что же касается состояния процесса загрузки, то здесь необходимо дать некоторые пояснения. Объект InternetExplorer имеет очень полезное для контроля состояния свойство — readyState. Это свойство принимает пять значений: от 0 до 4. Значение 4 соответствует состоянию Complete, переход в которое в нашем примере осуществляется посредством прерывания и вызова процедуры обработки. Отображая значения указанного свойства в окне состояния, можно прекрасно ориентироваться в происходящем «за кадром».

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

Как видно из приведенного текста, переход к очередному этапу осуществляется с помощью булевой переменной blnDone, которая принимает значение ИСТИНА в случае исчерпания времени ожидания или появления значения свойства readyState = READYSTATE_COMPLETE. Поскольку прерывание от таймера наступает позже, чем событие DocumentComplete (предполагаем, что наша машина — однопроцессорная), то переход в это состояние означает, что обработка страницы уже завершена.

Справедливости ради следует отметить, что в ряде случаев обработку страницы можно начинать и при readyState = READYSTATE_INTERACTIVE. Это то самое состояние, когда Internet Explorer позволяет просматривать страницу в интерактивном режиме, хотя еще не все компоненты загружены. Начиная с этого момента HTML-код вполне пригоден для обработки. Если для решения задач пользователя кода HTML достаточно, то процесс можно несколько ускорить, поместив вызов обработчика страниц в приведенную выше процедуру в конструкцию Select Case для состояний READYSTATE_INTERACTIVE и READYSTATE_COMPLETE. В этом случае событие DocumentComplete нужно заблокировать. Для того чтобы совсем минимизировать время загрузки, необходимо использовать пару событий: NavigateComplete2 и DownloadComplete. Событие NavgateComplete2 возникает, когда документ объявляется найденным и его URL попадает в стек навигации и становится доступным для проверки. Событие DounloadComplete, не имеющее параметров вызова, возникает неоднократно — перед событием NavigateComplete2 и после него. Именно наступление события DounloadComplete вслед за событием NavigateComplete2 соответствует переходу в состояние READYSTATE_INTERACTIVE и может использоваться для вызова процедуры обработки кода Web-страницы.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *