Internet и CGI

       

§3. CGI-JavaScript программирование.


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

Задача.
Автоматизировать процесс смены новостной информации (текстовой) в поле статической HTML-страницы и обеспечить при этом сохранение информации об авторских правах на публикацию.

Решение.
В новостной HTML-странице располагается некоторая подпрограмма-функция test_copyright() языка JavaScript, ненсущая инфорацию об авторских правах. Выполнение этой подпрогаммы возлагается на сценарий CGI. CGI программа считывает файл новостей с диска, сравнивает информацию об авторских правах с образом copyright и генерирует на лету свой JavaScript скрипт test2( ), который непосредственно и выполняет вывод в окно броузера.

Загрузка CGI ресурса выполняется с помощью атрибута SRC элемента SCRIPT:

<SCRIPT language="JavaScript" src="../cgi-bin/jscgi_prog.cgi"></SCRIPT>.

Расссмотрим сначала код HTML-страницы:

<html> <head> <style type="text/css">P.just{text-align: justify;}</style> <script> var name_copyright='Copyright 2002 The Web Production'; function test_copyright(){return name_copyright;} </script> <SCRIPT language="JavaScript" src="../cgi-bin/cgi_programming/jscgi_prog.cgi"></SCRIPT> </head> <body bgcolor='#00007b' text="white" leftmargin='0'> <center><h2>News Bulletin</h2></center><hr> <table border="0" cellspacing="0" cellpadding="20" width="800"> <tr> <td align="left" valign="top" width="400">Examples examples examples examples examples examples ......</td> <td bgcolor='#0000aa' align="left" valign="top" width="400"> <p class="just"><font color='#ffffff' size='4'> <script>test2();</script> </font></p></td> </tr> </table> </body> </html>


Как видим в теле HTML-страницы располагается подпрограмма-функция test_copyright( ). Возвращаемый параметр этой функции содержит copyright. Образ этого copyright находится в одной из переменных сценария CGI:

#!/usr/bin/perl print "Content-Type: text/html\n\n"; $path = "c:/apache/htdocs"; $FILE_NEWS=$path.'/txt/bulletin.txt'; open(LIST,"<$FILE_NEWS"); @lines=<LIST>; close(LIST); $txt=join("",@lines); $txt=~s/\n//g; $param='Copyright 2002 The Web Production'; #patteren print "function test2(){". "var m1= test_copyright();". "if(m1==\"$param\"){document.write(\"$txt\");". "document.write(\"<br><br>$param<br>\")}else{err();}}"; exit;

Функция test2( ) языка JavaScript, размещается в теле CGI-скрипта, а вызывается на выполнение при загрузке HTML-страницы. В процессе выполнения сценария CGI, последний анализирует информацию, возвращаемую подпрограммой-функцией test_copyright( ) и сравнивает ее, с помощью скрипта test2( ), с образом copyright в переменной $param. В зависимости от совпадения или несовпадения образа с copyright, новостная информация публикуется или возвращается ошибка JavaScript. Ошибка JavaScript, равносильная запрету на публикацию, возникает в двух случаях: 1) если вы измените или удалите copyright из тела HTML-страницы, 2) если вы попытаетесь удалить подпрограмму-функцию.

Отметим, что как и прежде, реализуется идеология разделения CGI-программы и дизайна (Рис.2).



Рис. 2.

Из кода HTML видно, что атрибуты текста новостей могут быть изменены независимо от сценария CGI и независимо от скрипта языка JavaScript. Разумеется, мы здесь представили упрощенный вариант скриптов, преследуя цель наглядности излагаемого материала. Понятно, что техника CGI-JavaScript программирования, позволяет создать весьма изощеренные средства защиты и ограничения доступа.


Содержание раздела