HTML - CGI

advertisement
КОСТИН
Обработка форм.
Форма – сов-ть нес-ких полей, в кот. пользль может что-л. вводить. Наличие НТТР –
сервера, WWW – сервера, НТТР –
доменом. Создатель формы д-н знать:
что происх-т с инф-ей, когда
данные ф-мы отправлены
куда идёт инф-я
что с ней происх-т
что польз-ль получает в ответ
Д.б. программа по ообработке данных
форм. Она должна распознавать тип
введенной инф-ии, обр-ку данных, форм-е
ответа, передать ответ польз-лю. Такая
программа наз-ся шлюз, скрипт, сценарий.
Эти программы всегда нах-ся на webсервере.
Диалог польз-ля:
1.
загрузка web-страницы, в кот.
есть форма
2.
заполнение формы
3.
броузер отсылает её серверу
4.
сер-р отсылает её сценарию,
адрес кот. указан в форме
5.
сценарий анал-ет получ-е резты и форм-ет либо док-т, либо ссылку
6.
сценарий передаёт ответ обрно сер-ру
7.
Сер-р передаёт ответ пользлю.
Для правильной разр-ки сценария по обр-ке
данных формы сущ-ет стандарт CGI
(common
gatiway
interfase)
общий
шлюзовый интерфейс. Этот стндарт разртан на основе НТТР. Он разработан, чтобы
прав-но взаимодейст-ли между собой
броузер, сервер и сценарии. Первонач-но
CGI был разр-н для UNIX, сл-но обмен
данными в нём ч-з переменные окружения,
стандартный ввод и вывод. В UNIX все
утилиты работают под ком. строкой.
Потоки инф-ии CGI:
Клиентский web-броузер
1
7
Web-сервер
2
6
CGI-программа
3,4,5
БД, E-mail, контроль, верификация
1.
сер-р получает запрос в виде URL,
кот явл-ся именем CGI-программы
2.
сер-р запускает скрипт или сценарий,
он уст-ет перем-е окруж-я. Посылает
данные сценарию. кот. получен от формы.
Эти
данные
он
пересылает
ч-з
стандартный ввод
3.
CGI-программа проверяет перем-е
окр-я и после этого читает данные из
стандартного ввода
4.
CGI-сценарий вып-ет работу для кот
он предн-н (SQL-запрос, поиск, т.д.)
5.
CGI-сценарий готовит возвр-е ответа
(текст.стр-ца HTML-стр-ца, перенапр-е к др
URL)
6.
Готовый
ответ
возвр-ся
ч-з
стандартный вывод.
7.
Сер-р, получив ответ, пересылает
его клиентскому web-сер-ру.
Отличия стандартного CGI от Windows
CGI – вместо стандартного ввода/вывода
исп-ся файлы .ini, temp.
Потоки инф-ции Windows-CGI
1.
См. схему выше
2.
сервер запускает CGI-программу, но
для неё он создаёт файлы *.ini с
информацией об окружении temp-файлы, в
кот сохр-ся данные-переменные от формы
3.
CGI-программа
считывает
зн-я
перем-х окр-я из ini-файла и после чего
считывает данные из временного файла
4.
5.
аналогично
6.
сформированный ответ сохраняется
во временном файле, имя кот пер-ся сер-ру
7.
аналогично
Виды ответов:
1.
Скрипт выдаёт только суть: в этом
сл-е сер-р доб-ет служебную инф-ю.
Content-type: text/html
Пустая строка (обяз-но)
<html><head><title>обработ-й
резт</titile><//head><body></title>
2.
Сценарий или скрипт форм-ет полню ответ. В этом сл-е сер-р ничего не
добавляет в лтвет, а передаёт его
пользователю
3.
переадресация в том сл-е, когда
обычно сер-р не нашёл док-т
location:/mypath/my_doc.html
пустая строка (разграничивает заголовки
протокола НТТР от того, что должно
выводиться на экран)
Мех-мы работы стандарта CGI
Включает 4 набора мех-ма обмена: перем.
окр-я, ком. строка, стандартный ввод и
вывод.
1.
перем. окр-я – С пом. Них сер-р
может
передавать
как
служебную
информацию так и данные формы.
Перем.окр-я бывают общие – для любой
формы запроса.; запросоориентированные
перем-е
окр-я;
переменные
окружения для идент-ции польз-ля – эта
группа важна, если сер-р обесп-ет безоп-ть
передачи запроса и ответа.
2.
Опции ком строки – применяются
для программ типа ISINDEX. В HTMLформах этот вид мех-ма не применяется.
3.
Формат
стандартного
ввода
обычно исп-ся при методе HOST, ноданные
кот идут в этом сл-е представляются в
такой же форме как и для метода GET.
a=b&b=c – имя от зн-я отделяется =, а все
пары разделяются между собой знаком &.
Каждая ф-я имеет ряд полей и кнопок.
Каждое поле или кнопка имеет своё имя,
кот отр-ся в атрибуте NAME. Когда пер-ся
данные о форме, то для каждой кнопки или
поля пер-ся пара сост-я из иени и зн-я.
Инф-я пер-ся для тех полей и кнопок, кот
заполнены и вкл-ны. Для меотда POST
броузер авт-ки форм-ся пер-е окр-я
CONTENT_LENGTHS, в заголовке запроса
пер-ся кол-во байт. При запросе по умолчисп-ся
тип:
application
|
x-wwwform_urlencoded
4.
Стандартный вывод используется
при возврате данных от скрипта к
пользователю.
Content type – ответ генерируется сходу
скриптами, реального файла на сервере
нет.
Location – если ответ есть в каком-либо
файле осуществляется переадресация;
Методы доступа:
GET – данные в URL. Для тех скриптов, кот
изм-ют данные на сер-ре его желательно
не применять, т.к. он небезопасен.
Условный GET – сер-р отв-ет на запрос
если удовл-ся некот. условия. Обычно эти
условия ук-ся в заголовке ресурса в поле.
Метод HEAD – с пом этого метода не
происх-т возврата тела рес-са. Прим-ся для
получения инф-ции о сущ-ии рес-са.
POST – большинство скриптов работают с
ним. Прим-ся дл яработы с базами, в кот
просх-т изм-я, т.к. он более безопасен.
Транскрипция передачи данных та же что и
в GET.
Ответы сер-ра м.б. упрощёнными и
полными
Упрощённый – пердаётся тело
рес-са (текст HTML-стр-цы)
Полный
Пример
На Delphi
А) Непосредственно
Открыть как на Паскале потоки
ввода/вывода Reset(Input), Rewrite(Output)
Чтение и запись стандартными
процедурами
ввода/вывода
Read(),
Readln(),
Write(),
Writeln(),
Fileread(),
Filewrite(), AssignFile (F,S) – лдя чтения
данных (F-дискриптор)
Для получения зн-й пер-х испся API (ф-ция Windows)
GetinviromentVariable
(Pchar( Name), Buffer, SizeOf (Buffer));
Name – имя переменной окружения, Buffer
– буфердля зн-ц перем-х.
Эта ф-ция возвр-ет
Число сим-в, записанных в
буфер, не вкл-я терминальный нулевой
сим-л (конца строки)
Если такой переменной не
найдено, то возвр-ся зн-е 0
Если буфер занят, то ф-я
возвр-ет необх-е размеры для её сохр-я
Например:
I:= GetinviromentVariable (‘QUERY_STRING’,
nil, 0);
GetMem(P, I+3);
I:= GetinviromentVariable (‘QUERY_STRING’,
P, I);
Б) Ч-з объекты
выбрать в гл. меню Delphi
WebServerApplication
выбрать
тип
сервера
ISAPI/NSAPI DynamicLinkLibrary
в
инструкторе
объектов
компоненту TwebModule
выбрать
редактор
св-ва
Actions
добавить операцию Action – в
инспекторе объектов появится св-во этой
операции
для
тестирования
может
понадобиться изм-ть эти св-ва Pathinfo на /
test Default на true
В инспекторе объектов на стрце Events и 2 раза щёлкнуть на поле
onAction
набрать текст скрипта в
заголовке процедура TWebModule1
откомпилировать и поместить
в каталог скриптов Web-сервера
В заготовке будет процедура TWebModul1.
TWebModule1WebActionItem1Action
(Sender; Tobject; Request: TwebRequest;
Response: TwebResponse; var Hadler:
Boolean);
var Str_Data: Tstring;
str1: string;
begin
Str_Data:= TstringList Create; - в этот конкр-й
объект при чтении будут заноситься
данные формы.
В ней строки вида
Name
=
Value
Имя поля
зн-е поля
Для проверки методов mtGet, mtPost,
mtHead
If Request.ExtractContentField (Str_Data)
Else if Request.MethodType=mtGet then
Request.ExtractQueryFields(Str-Data)
Else exit;
Для увеличения зн-й полей применить свва
StringList.StrData[‘Name’] = ‘Value’
Для ответа – объект Response
Для вида ответа:
Content Type
Response.ContentType:=’text/html’;
‘text/plain’;
Для самого ответа Content – полный текст
выходного док-та.
Response.Content:=
‘’<html><head><title>
Это CGI-скрипт </title></head> ’+’<body>
……Текст
ответа
‘
+Str1+’
Еще
текст</body></html>’;
Объект frame(frames)
Объект frame(frames) соответствует кадрам
(фреймам).
СИНТАКСИС
1.
parent.frameName.prop_Name
2.
parent.frames[i].prop_Name
3.
window. Prop_Name
4.
self. prop_Name
СВОЙСТВА
Name, frames, length
МЕТОДЫ
ClearTimeout()
set timeout()
OБРАБОТЧИКИ
OnLoad
OnUnLoad
При ссылке на фреймы:
1.
вниз:
frames[i].frames[j]
2.
по другой ветви: от верхнего top к
родительскому parent
top.frames[i]
parent.frames[i]
можно указывать имя фрейма.
РАБОТА С ФРЕЙМАМИ И ОКНАМИ
ОКНА
1.
При создании окна рекомен-дуется в
теге <HEAD> формировать:
“base href= ‘ “+ location + ” ’ >” – изменение
базового адреса для облегчения доступа
по относительному пути.
2. Передача фокуса
………
function createTwoWin()
{ var win1=window.open(‘ “, “win1”,
“height=60, width=175”, + ‘scrollbars=no’);
var win2=window.open(‘ “, “win2”,
“height=60, width=175”, + ‘scrollbars=no’);
}
// </script> </head>
<BODY unLoad=“ createTwoWin()”>
<FORM>
<INPUT
TYPE=“BUTTON”
VALUE=“focus.window1”
onClick=“win1.focus()”>
<INPUT
TYPE=“BUTTON”
VALUE=“focus.window2”
onClick=“win2.focus()”>
</FORM>
</BODY>
</HTML>
Здесь:
создаются окна win1 и win2
фокус
вода
получает
окно,
созданное последним
win1.focus() дает фокус первому окну
win1.location=“http://www.pmi.dgtu.don
etsk.ua” – загрузит страницы
если фокус передаем свернутому
окну, то броузер его разворачивает
3.
Применнение свойства opener
Находясь
в
окне-потомке
нельзя
использовать синоним родительсого окна
top. Если там находятся переменные и
функции (что можно при работе с
фреймами).
Для этого свойства opener  window. Оно
содержит имя окна, вызвавшего метод
open.
ПРИМЕР
……….
var winSign=false;
var wt;
function ch_but(N)
{ if (n==0)
{ winSign=false;
document.forms[0].elements[0].value=
“Open Window”;
}
else
{ winSign=true;
wt=window.open(“win1.htm”,
“wt”
,+
“toolbar=0”, “width=300 , hight=100”);
document.forms[0].elements[0].value=
“Focus Window”;
}
}
function TagWin()
{ if (!WinSign)
ch_but(1)
else wt.focus();
}
……..
<FORM>
<INPUT
TYPE=“BUTTON”
VALUE=“Open Window” onClick=“TagWin()”>
</FORM>
</BODY>
</HTML>
Файл Win1.htm, загруженный в окно wt
имеет вид
<HTML>
<BODY>
<FORM>
<INPUT
TYPE=“BUTTON”
VALUE=“Close
Window”
onClick=“
window.opener. ch_but(0);
self.close()>
</FORM>
</BODY>
</HTML>
Так можно проверить созданно окно или
нет.
ФРЕЙМЫ
1.Сохранение YS-программы после очистки
фрейма
все программы в родительский
документ
для обращения к ним применить
свойство parent
2.Использование имен URL типа JS
позволяет вічислить значение JS –
выражения и выводить результат в любой
документ
JavaScript:alert(“HELLO”)
это можно задавать и в поле location
все это дает возможность загрузки
страниц для которых нет файлов
ПРИМЕР
…………
var f1=”<BODY BGCOLOR=”blue”> THIS IS
FRAME1 </BODY>”;
var f2=”<BODY BGCOLOR=”red”> THIS IS
FRAME1 </BODY>”;
……………..
<FRAMESET ROWS=”*,*”>
<FRAME SRC=” JavaScript:parent.f1”>
<FRAME SRC=” JavaScript:parent.f2”>
</FRAMESET>
</HTML>
3.Работа с вложенными фреймами
- несколько уровней фрймов
- динамическая запись нового тега
<FRAMESET> ведет к изменению ссылок
на фреймы
- вместо parent нужно ссылку на top
ПРИМЕР JS-ПРОГРАММЫ, СОЗДАЮЩЕЙ
2 ФРЕЙМА
<!—
function prop2()
{return(“This is frame2”);}
function prop3()
{return(“This is frame3”);}
var frame1=”<BODY> This is frame1”+ “<P>
<FORM>
<INPUT
TYPE=“BUTTON”
VALUE=“Change
Frames”
onClick=“parent.change.frames()”>”
</FORM>
</BODY>;
var frame2=” “;
var frame3=<FRAMESET COLS=”*,*”>
<FRAME
NAME=”newfr2”
SRC=”JavaScript”:top.prop2()>;
<FRAME
NAME=”newfr3”
SRC=”JavaScript”:top.prop3()>;
</FRAMESET>;
function changeFrames()
{parent.frames[‘f2’].document.open();
parent.frames[‘f2’].document.write(parent.fram
e3);
parent.frames[‘f2’].document.close();
}
// </script> </head>
<FRAMESET ROWS=”30%,70%”>
<FRAME NAME=”f1” SRC=”/ JavaScript:
parent.frame1>;
<FRAME NAME=”f2” SRC=”/ JavaScript:
parent.frame2>;
</FRAMESET>
</HTML>
Фреймы newfr2, newfr3 принадлежит fr2.
Для оьбращения к newfr3 необходимо
задать полную иерархию объектов.
Top.frames[1].frames[1]
Top.frames[‘newfr3”]
Top.f2.newfr3
Если нельзя точно определить как
обратиться к фрейму, то в поле
необходимо ввести
JavaScript:alert(предпологаемое віражение)
Например при вводе:
JavaScript:alert(window.frames[1].
frames[1].name) появиться значение newfr3
Если без name, то появиться “[Object
Window]”
файл - - - frames.htm
<body bgcolor=ivory>
<center>
<form name=form1>
Текстовое поле 1<br>
<input
type=text
name=t1
onFocus="parent.data(t1.value)"><p>
Текстовое поле 2<br>
<input
type=text
name=t2
onFocus="parent.data(t2.value)"><p>
Текстовое поле 3<br>
<input
type=text
name=t3
onFocus="parent.data(t3.value)"><p>
<br><input type=reset>
</form>
</center>
</body>
файл с программой
<head><script language=JavaScript>
var SpaceCounter=0;
var space=' ';
var t='';
function wr()
{
top.frames[1].form2.tr.value=t+Date();
t=t+space;
SpaceCounter++;
if (SpaceCounter==130)
{
t=''
SpaceCounter=0;
}
q=setTimeout("wr()",100);
}
function data(s)
{
template=String("0123456789");
var tmp=String(s);
flag=true;
i=0;
while(i<s.length)
{
if ((template.indexOf(tmp.charAt(i)))!=-1)
flag=false;
i++;
}
if ((flag==true)&&(s.length>0))
{
var
rez=String('<center><h2><font
color=red>Это
окно
результата</font></h2><br><br>');
rez=rez+'<form
name=form2><input
type=text size=80 name=tr><p>';
rez=rez+'<br></center></form>';
top.frames[1].document.write(rez);
top.wr();
}
}
</script></head>
<frameset cols="30%,*">
<frame name=fr1 src="frame1.htm">
<frame name=fr2>
</frameset>
</html>
КОСТИН
Обработка форм.
Форма – сов-ть нес-ких полей, в кот. пользль может что-л. вводить. Наличие НТТР –
сервера, WWW – сервера, НТТР –
доменом. Создатель формы д-н знать:
что происх-т с инф-ей, когда
данные ф-мы отправлены
куда идёт инф-я
что с ней происх-т
что польз-ль получает в ответ
Д.б. программа по ообработке данных
форм. Она должна распознавать тип
введенной инф-ии, обр-ку данных, форм-е
ответа, передать ответ польз-лю. Такая
программа наз-ся шлюз, скрипт, сценарий.
Эти программы всегда нах-ся на webсервере.
Диалог польз-ля:
8.
загрузка web-страницы, в кот.
есть форма
9.
заполнение формы
10.
броузер отсылает её серверу
11.
сер-р отсылает её сценарию,
адрес кот. указан в форме
12.
сценарий анал-ет получ-е резты и форм-ет либо док-т, либо ссылку
13.
сценарий передаёт ответ обрно сер-ру
14.
Сер-р передаёт ответ пользлю.
Для правильной разр-ки сценария по обр-ке
данных формы сущ-ет стандарт CGI
(common
gatiway
interfase)
общий
шлюзовый интерфейс. Этот стндарт разртан на основе НТТР. Он разработан, чтобы
прав-но взаимодейст-ли между собой
броузер, сервер и сценарии. Первонач-но
CGI был разр-н для UNIX, сл-но обмен
данными в нём ч-з переменные окружения,
стандартный ввод и вывод. В UNIX все
утилиты работают под ком. строкой.
Потоки инф-ии CGI:
Клиентский web-броузер
1
7
Web-сервер
2
6
CGI-программа
3,4,5
БД, E-mail, контроль, верификация
8.
сер-р получает запрос в виде URL,
кот явл-ся именем CGI-программы
9.
сер-р запускает скрипт или сценарий,
он уст-ет перем-е окруж-я. Посылает
данные сценарию. кот. получен от формы.
Эти
данные
он
пересылает
ч-з
стандартный ввод
10.
CGI-программа проверяет перем-е
окр-я и после этого читает данные из
стандартного ввода
11.
CGI-сценарий вып-ет работу для кот
он предн-н (SQL-запрос, поиск, т.д.)
12.
CGI-сценарий готовит возвр-е ответа
(текст.стр-ца HTML-стр-ца, перенапр-е к др
URL)
13.
Готовый
ответ
возвр-ся
ч-з
стандартный вывод.
14.
Сер-р, получив ответ, пересылает
его клиентскому web-сер-ру.
Отличия стандартного CGI от Windows
CGI – вместо стандартного ввода/вывода
исп-ся файлы .ini, temp.
Потоки инф-ции Windows-CGI
8.
См. схему выше
9.
сервер запускает CGI-программу, но
для неё он создаёт файлы *.ini с
информацией об окружении temp-файлы, в
кот сохр-ся данные-переменные от формы
10.
CGI-программа
считывает
зн-я
перем-х окр-я из ini-файла и после чего
считывает данные из временного файла
11.
12.
аналогично
13.
сформированный ответ сохраняется
во временном файле, имя кот пер-ся сер-ру
14.
аналогично
Виды ответов:
4.
Скрипт выдаёт только суть: в этом
сл-е сер-р доб-ет служебную инф-ю.
Content-type: text/html
Пустая строка (обяз-но)
<html><head><title>обработ-й
резт</titile><//head><body></title>
5.
Сценарий или скрипт форм-ет полню ответ. В этом сл-е сер-р ничего не
добавляет в лтвет, а передаёт его
пользователю
6.
переадресация в том сл-е, когда
обычно сер-р не нашёл док-т
location:/mypath/my_doc.html
пустая строка (разграничивает заголовки
протокола НТТР от того, что должно
выводиться на экран)
Мех-мы работы стандарта CGI
Включает 4 набора мех-ма обмена: перем.
окр-я, ком. строка, стандартный ввод и
вывод.
5.
перем. окр-я – С пом. Них сер-р
может
передавать
как
служебную
информацию так и данные формы.
Перем.окр-я бывают общие – для любой
формы запроса.; запросоориентированные
перем-е
окр-я;
переменные
окружения для идент-ции польз-ля – эта
группа важна, если сер-р обесп-ет безоп-ть
передачи запроса и ответа.
6.
Опции ком строки – применяются
для программ типа ISINDEX. В HTMLформах этот вид мех-ма не применяется.
7.
Формат
стандартного
ввода
обычно исп-ся при методе HOST, ноданные
кот идут в этом сл-е представляются в
такой же форме как и для метода GET.
a=b&b=c – имя от зн-я отделяется =, а все
пары разделяются между собой знаком &.
Каждая ф-я имеет ряд полей и кнопок.
Каждое поле или кнопка имеет своё имя,
кот отр-ся в атрибуте NAME. Когда пер-ся
данные о форме, то для каждой кнопки или
поля пер-ся пара сост-я из иени и зн-я.
Инф-я пер-ся для тех полей и кнопок, кот
заполнены и вкл-ны. Для меотда POST
броузер авт-ки форм-ся пер-е окр-я
CONTENT_LENGTHS, в заголовке запроса
пер-ся кол-во байт. При запросе по умолчисп-ся
тип:
application
|
x-wwwform_urlencoded
8.
Стандартный вывод используется
при возврате данных от скрипта к
пользователю.
Content type – ответ генерируется сходу
скриптами, реального файла на сервере
нет.
Location – если ответ есть в каком-либо
файле осуществляется переадресация;
Методы доступа:
GET – данные в URL. Для тех скриптов, кот
изм-ют данные на сер-ре его желательно
не применять, т.к. он небезопасен.
Условный GET – сер-р отв-ет на запрос
если удовл-ся некот. условия. Обычно эти
условия ук-ся в заголовке ресурса в поле.
Метод HEAD – с пом этого метода не
происх-т возврата тела рес-са. Прим-ся для
получения инф-ции о сущ-ии рес-са.
POST – большинство скриптов работают с
ним. Прим-ся дл яработы с базами, в кот
просх-т изм-я, т.к. он более безопасен.
Транскрипция передачи данных та же что и
в GET.
Ответы сер-ра м.б. упрощёнными и
полными
Упрощённый – пердаётся тело
рес-са (текст HTML-стр-цы)
Полный
Пример
На Delphi
А) Непосредственно
Открыть как на Паскале потоки
ввода/вывода Reset(Input), Rewrite(Output)
Чтение и запись стандартными
процедурами
ввода/вывода
Read(),
Readln(),
Write(),
Writeln(),
Fileread(),
Filewrite(), AssignFile (F,S) – лдя чтения
данных (F-дискриптор)
Для получения зн-й пер-х испся API (ф-ция Windows)
GetinviromentVariable
(Pchar( Name), Buffer, SizeOf (Buffer));
Name – имя переменной окружения, Buffer
– буфердля зн-ц перем-х.
Эта ф-ция возвр-ет
Число сим-в, записанных в
буфер, не вкл-я терминальный нулевой
сим-л (конца строки)
Если такой переменной не
найдено, то возвр-ся зн-е 0
Если буфер занят, то ф-я
возвр-ет необх-е размеры для её сохр-я
Например:
I:= GetinviromentVariable (‘QUERY_STRING’,
nil, 0);
GetMem(P, I+3);
I:= GetinviromentVariable (‘QUERY_STRING’,
P, I);
Б) Ч-з объекты
выбрать в гл. меню Delphi
WebServerApplication
выбрать
тип
сервера
ISAPI/NSAPI DynamicLinkLibrary
в
инструкторе
объектов
компоненту TwebModule
выбрать
редактор
св-ва
Actions
добавить операцию Action – в
инспекторе объектов появится св-во этой
операции
для
тестирования
может
понадобиться изм-ть эти св-ва Pathinfo на /
test Default на true
В инспекторе объектов на стрце Events и 2 раза щёлкнуть на поле
onAction
набрать текст скрипта в
заголовке процедура TWebModule1
откомпилировать и поместить
в каталог скриптов Web-сервера
В заготовке будет процедура TWebModul1.
TWebModule1WebActionItem1Action
(Sender; Tobject; Request: TwebRequest;
Response: TwebResponse; var Hadler:
Boolean);
var Str_Data: Tstring;
str1: string;
begin
Str_Data:= TstringList Create; - в этот конкр-й
объект при чтении будут заноситься
данные формы.
В ней строки вида
Name
=
Value
Имя поля
зн-е поля
Для проверки методов mtGet, mtPost,
mtHead
If Request.ExtractContentField (Str_Data)
Else if Request.MethodType=mtGet then
Request.ExtractQueryFields(Str-Data)
Else exit;
Для увеличения зн-й полей применить свва
StringList.StrData[‘Name’] = ‘Value’
Для ответа – объект Response
Для вида ответа:
Content Type
Response.ContentType:=’text/html’;
‘text/plain’;
Для самого ответа Content – полный текст
выходного док-та.
Response.Content:=
‘’<html><head><title>
Это CGI-скрипт </title></head> ’+’<body>
……Текст
ответа
‘
+Str1+’
Еще
текст</body></html>’;
Объект frame(frames)
Объект frame(frames) соответствует кадрам
(фреймам).
СИНТАКСИС
5.
parent.frameName.prop_Name
6.
parent.frames[i].prop_Name
7.
window. Prop_Name
8.
self. prop_Name
СВОЙСТВА
Name, frames, length
МЕТОДЫ
ClearTimeout()
set timeout()
OБРАБОТЧИКИ
OnLoad
OnUnLoad
При ссылке на фреймы:
4.
вниз:
frames[i].frames[j]
5.
по другой ветви: от верхнего top к
родительскому parent
top.frames[i]
parent.frames[i]
можно указывать имя фрейма.
РАБОТА С ФРЕЙМАМИ И ОКНАМИ
ОКНА
1.
При создании окна рекомен-дуется в
теге <HEAD> формировать:
“base href= ‘ “+ location + ” ’ >” – изменение
базового адреса для облегчения доступа
по относительному пути.
2. Передача фокуса
………
function createTwoWin()
{ var win1=window.open(‘ “, “win1”,
“height=60, width=175”, + ‘scrollbars=no’);
var win2=window.open(‘ “, “win2”,
“height=60, width=175”, + ‘scrollbars=no’);
}
// </script> </head>
<BODY unLoad=“ createTwoWin()”>
<FORM>
<INPUT
TYPE=“BUTTON”
VALUE=“focus.window1”
onClick=“win1.focus()”>
<INPUT
TYPE=“BUTTON”
VALUE=“focus.window2”
onClick=“win2.focus()”>
</FORM>
</BODY>
</HTML>
Здесь:
создаются окна win1 и win2
фокус
вода
получает
окно,
созданное последним
win1.focus() дает фокус первому окну
win1.location=“http://www.pmi.dgtu.don
etsk.ua” – загрузит страницы
если фокус передаем свернутому
окну, то броузер его разворачивает
6.
Применнение свойства opener
Находясь
в
окне-потомке
нельзя
использовать синоним родительсого окна
top. Если там находятся переменные и
функции (что можно при работе с
фреймами).
Для этого свойства opener  window. Оно
содержит имя окна, вызвавшего метод
open.
ПРИМЕР
……….
var winSign=false;
var wt;
function ch_but(N)
{ if (n==0)
{ winSign=false;
document.forms[0].elements[0].value=
“Open Window”;
}
else
{ winSign=true;
wt=window.open(“win1.htm”,
“wt”
,+
“toolbar=0”, “width=300 , hight=100”);
document.forms[0].elements[0].value=
“Focus Window”;
}
}
function TagWin()
{ if (!WinSign)
ch_but(1)
else wt.focus();
}
……..
<FORM>
<INPUT
TYPE=“BUTTON”
VALUE=“Open Window” onClick=“TagWin()”>
</FORM>
</BODY>
</HTML>
Файл Win1.htm, загруженный в окно wt
имеет вид
<HTML>
<BODY>
<FORM>
<INPUT
TYPE=“BUTTON”
VALUE=“Close
Window”
onClick=“
window.opener. ch_but(0);
self.close()>
</FORM>
</BODY>
</HTML>
Так можно проверить созданно окно или
нет.
ФРЕЙМЫ
1.Сохранение YS-программы после очистки
фрейма
все программы в родительский
документ
для обращения к ним применить
свойство parent
2.Использование имен URL типа JS
позволяет вічислить значение JS –
выражения и выводить результат в любой
документ
JavaScript:alert(“HELLO”)
это можно задавать и в поле location
все это дает возможность загрузки
страниц для которых нет файлов
ПРИМЕР
…………
var f1=”<BODY BGCOLOR=”blue”> THIS IS
FRAME1 </BODY>”;
var f2=”<BODY BGCOLOR=”red”> THIS IS
FRAME1 </BODY>”;
……………..
<FRAMESET ROWS=”*,*”>
<FRAME SRC=” JavaScript:parent.f1”>
<FRAME SRC=” JavaScript:parent.f2”>
</FRAMESET>
</HTML>
3.Работа с вложенными фреймами
- несколько уровней фрймов
- динамическая запись нового тега
<FRAMESET> ведет к изменению ссылок
на фреймы
- вместо parent нужно ссылку на top
ПРИМЕР JS-ПРОГРАММЫ, СОЗДАЮЩЕЙ
2 ФРЕЙМА
<!—
function prop2()
{return(“This is frame2”);}
function prop3()
{return(“This is frame3”);}
var frame1=”<BODY> This is frame1”+ “<P>
<FORM>
<INPUT
TYPE=“BUTTON”
VALUE=“Change
Frames”
onClick=“parent.change.frames()”>”
</FORM>
</BODY>;
var frame2=” “;
var frame3=<FRAMESET COLS=”*,*”>
<FRAME
NAME=”newfr2”
SRC=”JavaScript”:top.prop2()>;
<FRAME
NAME=”newfr3”
SRC=”JavaScript”:top.prop3()>;
</FRAMESET>;
function changeFrames()
{parent.frames[‘f2’].document.open();
parent.frames[‘f2’].document.write(parent.fram
e3);
parent.frames[‘f2’].document.close();
}
// </script> </head>
<FRAMESET ROWS=”30%,70%”>
<FRAME NAME=”f1” SRC=”/ JavaScript:
parent.frame1>;
<FRAME NAME=”f2” SRC=”/ JavaScript:
parent.frame2>;
</FRAMESET>
</HTML>
Фреймы newfr2, newfr3 принадлежит fr2.
Для оьбращения к newfr3 необходимо
задать полную иерархию объектов.
Top.frames[1].frames[1]
Top.frames[‘newfr3”]
Top.f2.newfr3
Если нельзя точно определить как
обратиться к фрейму, то в поле
необходимо ввести
JavaScript:alert(предпологаемое віражение)
Например при вводе:
JavaScript:alert(window.frames[1].
frames[1].name) появиться значение newfr3
Если без name, то появиться “[Object
Window]”
файл - - - frames.htm
<body bgcolor=ivory>
<center>
<form name=form1>
Текстовое поле 1<br>
<input
type=text
name=t1
onFocus="parent.data(t1.value)"><p>
Текстовое поле 2<br>
<input
type=text
name=t2
onFocus="parent.data(t2.value)"><p>
Текстовое поле 3<br>
<input
type=text
name=t3
onFocus="parent.data(t3.value)"><p>
<br><input type=reset>
</form>
</center>
</body>
файл с программой
<head><script language=JavaScript>
var SpaceCounter=0;
var space=' ';
var t='';
function wr()
{
top.frames[1].form2.tr.value=t+Date();
t=t+space;
SpaceCounter++;
if (SpaceCounter==130)
{
t=''
SpaceCounter=0;
}
q=setTimeout("wr()",100);
}
function data(s)
{
template=String("0123456789");
var tmp=String(s);
flag=true;
i=0;
while(i<s.length)
{
if ((template.indexOf(tmp.charAt(i)))!=-1)
flag=false;
i++;
}
if ((flag==true)&&(s.length>0))
{
var
rez=String('<center><h2><font
color=red>Это
окно
результата</font></h2><br><br>');
rez=rez+'<form
name=form2><input
type=text size=80 name=tr><p>';
rez=rez+'<br></center></form>';
top.frames[1].document.write(rez);
top.wr();
}
}
</script></head>
<frameset cols="30%,*">
<frame name=fr1 src="frame1.htm">
<frame name=fr2>
</frameset>
</html>
Download