КОСТИН Обработка форм. Форма – сов-ть нес-ких полей, в кот. пользль может что-л. вводить. Наличие НТТР – сервера, 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>