Сделай Сам Свою Работу на 5

Объекты MS Internet Explorer





Браузер MS Internet Explorer разработан с использованием технологии Automation. Приложение, созданное на основе этой технологии, раскрывает свои объекты другим приложениям, поддерживающим данную технологию. Эти приложения имеют доступ к методам и свойствам объектов другого приложения Automation. Иерархическая структура объектов Internet Explorer достаточна сложна, но для написания сценариев используется часть объектной модели, связанной с элементами HTML-страницы.

Во главе иерархии, как и в случае с Netscape Navigator, стоит объект window, представляющий окно браузера и порождающий все остальные объекты модели. При ссылке в программе на любой объект из иерархии можно не указывать "родительский" объект window.

Модель охватывает практически все элементы HTML-страницы. На рис. 9.17 показана иерархическая структура объектной модели, которая отражает подчиненность элементов страницы.

Рис. 9.17. Объектная модель MS Internet Explorer

Для каждого типа элементов в модели предусмотрены соответствующие наборы. Например, для объектов image, определяемых тэгами <IMG>, существует набор images. Ссылку на соответствующий объект можно определить с использованием имени объекта, задаваемого значением параметра NAME, или с помощью набора объектов, в данном случае images. В наборе объекты расположены в последовательности, в которой они задаются на HTML-странице.



Примечание

Наборы объектов, собственно говоря, являются свойствами порождающих их объектов. Имена наборов объектов задаются в виде множественного числа существительных (в английском языке добавляется буква "s" в конце слова), определяющих типы объектов.

Формы HTML, отображаемые в объектах Form, содержат разнообразные элементы управления, которые порождают соответствующие объекты, подчиненные объекту Form. Все, что сказано об этих объектах в разделе "Язык создания сценариев JavaScript", остается в силе и при работе с этими объектами с помощью языка VBScript.

Процедуры обработки событий

Как и в сценарии JavaScript, весь код VBScript должен располагаться в тэге-контейнере <SGRIPT>. . .</SCRIPT>. Для обратной совместимости с браузерами, не поддерживающими язык сценариев VBScript, следует размещать код внутри тега <SCRIPT> в контейнере-комментарии, как показано ниже:



<SCRIPT TYPE="text/vbscript" LANGUAGE="VBScript">

<!--

код сценария VBScript

'-->

</SCRIPT>

Завершающий тег комментария предваряется знаком ('), чтобы интерпретатор браузера не сгенерировал ошибку синтаксиса.

Предупреждение

Следует избегать появления в коде сценария последовательности символов (</), так как интерпретатор воспринимает ее как завершающий тег и может не обработать до конца сценарий. Если необходимо напечатать в документе последовательность указанных символов, в коде VBScript следует заменить знак / на его представление через десятичный код Chr (47)и использовать операцию конкатенации строк. Например, если необходимо при динамическом создании документа напечатать

Абзац</р>, то следует использовать метод Write объекта Document следующим образом:

Document.Write "

Абзац<" & Chr(47) & "р>"

Параметр LANGUAGE задает язык сценария. Параметр TYPE, определяющий MIME-тип заключенного в тег <SCRIPT> кода, задает также язык сценария. Для VBScript значение этого параметра должно быть строкой "text/vbscript". Этот параметр включен в HTML 4.0, но может не поддерживаться некоторыми браузерами, поэтому рекомендуется задавать оба параметра одновременно.

Примечание

Все сказанное выше о параметрах TYPE и LANGUAGE относится и к языку JavaScript, для которого MIME-тип следует задавать в виде строки "text/javascript".

Указанным выше способом код сценария непосредственно встраивается в страницу. Параметр SRC тега <SCRIPT> позволяет указать полный или относительный адрес внешнего файла, содержащего код VBScript, который будет загружен и обработан интерпретатором браузера.



Internet Explorer поддерживает ещё два параметра: FOR и EVENT тега <SCRIPT>, непосредственно связанных с процедурами обработки событий, и речь о которых пойдет немного ниже.

В каком месте документа лучше размешать код сценария? В любом месте документа и в неограниченном количестве. Но, как и в случае с JavaScript, определения процедур рекомендуется размещать в разделе <HEAD>, хотя это и не обязательно. Подобная практика улучшает чтение кода сценария, позволяя избегать поиска процедуры по всему документу. Более того, при интерпретации браузером документа раздел <HEAD> интерпретируется до начала обработки тела документа, следовательно, все процедуры будут размещены в памяти до того, как в документе встретится их вызов.

Если читатель прочитал раздел "Язык создания сценариев JavaScript", то он помнит, что каждый объект, соответствующий какому-либо элементу HTML-документа, имеет возможность перехватывать и обрабатывать события, возникающие в результате разнообразных действий пользователя с данным объектом (установка курсора мыши над связью, щелчок на кнопке формы, нажатие клавиши клавиатуры при установленном в поле ввода курсоре и т.д.). Для этого в теги HTML, описывающие элементы документа, введены специальные параметры обработки событий: onMouseOver, onclick, onKeyUp и т. д. Значениями этих параметров является код вызова процедур, которые выполняются в ответ на произошедшее событие.

Задавать выполняемый код можно несколькими способами. Самый простой — задание кода в качестве значения параметра с указанием в начале строки используемого языка:

<BODY>

Пример обработки событий в VBScript<BR>

<FORM>

<INPUT TYPE="BUTTON" VALOE-"Нажми меня" NAME="Button1"

OnClick="vbScrIpt: Alert 'Сообщение в ответ на щелчок1'">

</FORM>

</BODY>

Представленный фрагмент кода задает^ в документе кнопку с надписью "нажми меня", щелчок на которой приводит к вызову диалогового окна с надписью "Сообщение в ответ на щелчок1".

Префикс vbscript: сообщает интерпретатору, что необходимо использовать язык сценариев VBScript. Далее задается код VBScript, вызывающий метод Alert объекта window. Подобный метод применим, когда необходимо выполнить один-два оператора языка.

Примечание

Если в качестве префикса указать javascript:, то будет вызван интерпретатор языка JavaScript, а последующий код должен быть, соответственно, написан на языке JavaScript.

Второй способ использует параметры FOR и EVENT в тэге <SCRIPT>. Предыдущий фрагмент может быть переписан следующим образом:

<BODY>

Пример обработки событий в VBScript<BR>

<FORM>

<INPUT TYPE="BUTTON" VALUE="Нажми меня" NAME="button1">

<SCRIPT FOR="button1" EVENT="OnClick" LANGUAGE="VBScript">

<!--

Alert 'Сообщение в ответ на щелчок1'

'-->

</SCRIPT>

</FORM>

При использовании данного способа задания процедуры обработки события в тэге <INPUT>, определяющем кнопку формы, параметр обработки события click не задается, но в тэге <SCRIPT>, определяющем код сценария, параметр EVENT определяет, в ответ на какое событие будет выполняться код, а параметр FOR — для какого объекта. Значением первого параметра является имя параметра обработки события (onclick) тега элемента, а значением второго параметра — имя элемента (Buttoni), для которого вызывается код, определенное в параметре NAME тега элемента.

Примечание

Указанный способ обработки события распознается только браузером Internet Explorer, и поэтому его следует избегать. Здесь он упомянут исключительно ради полноты описания.

Третий способ задания процедуры обработки события унаследован VBScript от своего "родителя" Visual Basic и заключается в специальном именовании процедуры обработки события при ее объявлении. Любая процедура, имя которой составлено из имени объекта и имени события этого объекта с префиксом (on), соединенных знаком подчеркивания, рассматривается VBScript как процедура обработки указанного события для указанного объекта. Процедуру обработки события для рассмотренного выше примера можно определить следующим образом:

<SCRIPT TYPE="text/vbscript" LANGUAGE="VBScript">

<!--

Sub Button1_onClick()

Alert "Сообщение в ответ на щелчок1"

End Sub

'-->

</SCRIPT>

Этот способ удобен тем, что можно в одном тэге <SCRIPT> собрать все процедуры обработки событий всех элементов документа.

Для тех, кто программирует на Visual Basic или Visual Basic for Application последний способ инициирования процедуры обработки события, вероятно, окажется самым подходящим. Более того, в специальных приложениях Windows, предоставляющих среду разработки HTML-страниц на языке VBScript, этот способ является основным.

Практические примеры

В этом разделе приводится несколько примеров программирования сценариев VBScript.

Плавающий фрейм

Тэг <IFRAME> задает плавающий фрейм на HTML-странице. Его можно использовать для отображения динамически создаваемой страницы. Такая техника полезна, например, при написании учебной страницы по языкам сценариев. В тексте можно привести код изучаемой конструкции, а при щелчке кнопкой мыши внутри плавающего фрейма она отобразится так, как ее увидит конечный пользователь.

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

<BODY BGCOLOR="FFFF00">

Щелчок кнопкой мыши на плавающем фрейме приводит

к отображению в нем содержимого</Р>

<IFRAME WIDTH="400" HEIGHT="100" FRAMEBORDER="1"

NAME="fra1" OnFocus="FillIFrame">

</IFRAME>

</BODY>

При щелчке на плавающем фрейме он получает фокус, и происходит вызов процедуры FillLFrame. На рис. 9.18 показана эта страница, отображенная в окне браузера.

Теперь остается только создать процедуру VBScript, создающую содержимое плавающего фрейма. Ее текст представлен ниже и должен быть размещен в разделе <HEAD> предыдущего документа:

<SCRIPT LANGUAGE="VBScript">

<!--

Sub FillIFrame()

With Parent.Frames("fra1").Document

.Clear

.WriteLn "<HTML>"

.WriteLn "<BODY BGCOLOR='00CCFF'>"

.WriteLn "

Тест работы с плавающим фреймом!<BR>"

.WriteLn "<FORM>"

.WriteLn "<SCRIPT LANGUAGE=" & Chr(34) & "VBScript" & _

Chr(34) & "><" & Chr(47) & "SCRIPT>"

.WriteLn "<INPUT TYPE=BUTTON VALUE=" & Chr(34) &

"Нажми" & Chr(34) & " NAME=button1 "

.WriteLn "OnClick='Alert " & Chr(34) &

"Простое сообщение." & Chr(34) & _

", vbExclamation, " & Chr(34) & _

"VBScript тест" & Chr(34) & '">"

.WriteLn "<" & Chr(47) & "FORM>"

.WriteLn "<" & Chr(47) & "BODY>"

.WriteLn "<" & Chr(47) & "HTML>"

.Close

End With

End Sub

'-->

</SCRIPT>

Рис. 9.18. Страница с плавающим фреймом

Оператор with задает объект, методы которого вызываются в теле оператора. В нашем примере — это документ, отображаемый в плавающем фрейме. Методы WriteLn записывают в документ строки, содержащие теги HTML, и тем самым динамически формируют документ, отображаемый во фрейме.

Щелчок кнопкой мыши при расположении ее курсора в области фрейма приводит к возникновению события Focus, которое интерпретатор перехватывает и запускает на выполнение процедуру FillLFrame(). Результат отображения динамически созданной страницы показан на рис. 9.19.

Рис. 9.19. Содержимое фрейма после получения им фокуса

Это полноправная страница. При щелчке на кнопке, расположенной во фрейме, отобразится диалоговое окно подсказки — действие, определенное в процедуре обработки события click кнопки страницы.

Баннер

Можно организовать динамическое отображение разных страниц во фрейме, имитируя, таким образом, работу баннера. Реализация подобного процесса осуществляется вызовом разных процедур, готовящих и отображающих соответствующие страницы во фрейме с использованием функции setTimeOut. В этом примере мы создадим плавающий фрейм, в котором будет постепенно по частям отображаться строка "Издательство В НУ", затем также по частям она будет исчезать, и процесс начнется сначала. Каждая динамически появляющаяся во фрейме строка будет отображаться разным цветом, создавая эффект "неоновой" рекламы.

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

<BODY BGCOLOR="FFFF00">

<P ALIGN="center">

<IFRAME NAME="frameBHV" HEIGHT="70" WIDTH="200"></IFRAME></P>

Вас приветствует "Издательство BHV", Санкт-Петербург!

</BODY>

В верхней части страницы отображается плавающий фрейм, ссылаться на который из сценария можно при помощи имени frameBHv. Ниже фрейма располагается текст приветствия.

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

В них используются переменные Page1, Page2, PageЗ, Page4 и Page5, Содержащие определения цветов фона и текста, и переменная pageEnd, которая хранит завершающие теги страницы.

Dim PageEnd

Page1 = "<BODY BGCOLOR='#00CCFF' TEXT='#0000FF'><PRE>"

Page2 = "<BODY BGCOLOR='#00CCFF' TEXT='#00FFFF'><PRE>"

Page3 = "<BODY BGCOLOR='#00CCFF' TEXT='#00FF00'><PRE>"

Page4 = "<BODY BGCOLOR='#00CCFF' TEXT='#FFFF00'><PRE>"

Page5 = "<BODY BGCOLOR='#00CCFF' TEXT='#FF0000'><PRE>"

PageEnd = "</PRE></BODY>"

Первая вызываемая процедура — процедура без параметров AnimFrame1, которая отображает во фрейме строку "Из" синим цветом, и по прошествии 1/4 секунды вызывает процедуру AnimFrame2 с параметром True. Это действие реализуется функцией setTimeOut, которая выполняет код, заданный первым параметром, через количество миллисекунд, определяемых вторым параметром этой функции.

Sub AnimFrame1

Window.frameBHV.Document.Write Page1 & "Из" & EndPage

Window.frameBHV.Document.Close

SetTimeOut "AnimFrame2 True", 250, "VBScript"

End Sub

Процедура AnimFrame2 отображает во фрейме строку "Издат" голубым цветом и вызывает Процедуру AnimFrame3 или AnimFrame1, в зависимости от того, должна ли появиться вся надпись (параметр forw равен True) или вся надпись должна исчезнуть (параметр forw равен False).

Sub AnimFrame2(forw)

Window.frameBHV.Document.Write Page2 & "Издат" & EndPage

Window.frameBHV.Document.Close

If forw Then

SetTimeOut "AnimFrame3 True", 250, "VBScript"

Else

SetTimeOut "AnimFrame1", 250, "VBScript"

End If

End Sub

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

Sub AnimFrame3(forw)

Window.frameBHV.Document.Write Page3 & "Издатель" & EndPage

Window.frameBHV.Document.Close

If forw Then

SetTimeOut "AnimFrame4 True", 250, "VBScript"

Else

SetTimeOut "AnimFrame2 False", 250, "VBScript"

End If

End Sub

Sub AnimFrame4 (forw)

Window.frameBHV.Document.Write Page4 & "Издательство" & EndPage

Window.frameBHV.Document.Close

If forw Then

SetTimeOut "AnimFrame5", 250, "VBScript"

Else

SetTimeOut "AnimFrame3 False", 250, "VBScript"

End If

End Sub

Последняя, пятая процедура AnimFrame5 отображает строку "Издательство BHV" и запускает процесс отображения в обратном порядке (процедура AnimFrame4 вызывается с параметром False).

Sub AnimFrame5

Window.frameBHV.Document.Write Page5 & "Издательство BHV" & EndPage

Window.fraHello.Document.Close

SetTimeOut "AnimFrame4 False", 250, "VBScript"

End Sub

Теперь, для запуска всего процесса необходимо инициализировать выполнение первой процедуры AnimFrame1 при загрузке документа в окно браузера. Это действие реализуется в процедуре обработки события Load объекта window:

Sub Window_OnLoad()

AnimFrame1

End Sub

Результаты отображения информации во фрейме в разные моменты времени показаны на рис. 9.20 и 9.21.

Примечание

На рис. 9.20 строка во фрейме отображается синим цветом, а на рис. 9.21 — красным.

Предупреждение

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

Рис. 9.20. Отображение строки "Из" во фрейме страницы

Рис. 9.21. Отображение строки "Издательство BHV" во фрейме страницы

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.