- •Переменные, массивы и константы
- •Примечание
- •Примечание
- •Операторы условия и цикла
- •Примечание
- •Примечание
- •Примечание
- •Примечание
- •Примечание
- •Примечание
- •Процедуры
- •VbScript предусматривает создание двух типов процедур:
- •Объектная модель и взаимодействие с элементами документа
- •Функции и объекты ядра vbScript
- •InputBox(подсказка, заголовок, умалч_знач, х, у)
- •Примечание
- •Примечание
- •Примечание
- •Примечание
Примечание
Указанный способ обработки события распознается только браузером 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" во фрейме страницы
