- •1. Основні поняття
- •1.1. Сім варіацій на тему "Hello, world! "
- •1.1.1. Варіація перша: сама проста
- •1.1.2. Варіація друга: із секретним вихідним текстом
- •1.1.3. Варіація третя: із переменной і функціями
- •1.1.4. Варіація четверта: створення сторінки "на літу"
- •1.1.5. Варіація п'ята: із діалоговою панеллю
- •1.1.6. Варіація шоста: опрацювання події
- •1.2. Перемінні в JavaScript
- •1.2.1. Оголошення перемінних
- •1.1.7. Варіація сьома: із визначенням типу браузера
- •1.2.2. Присвоєння значення перемінним
- •1.2.3. Типи даних
- •1.2.4. Перетворення типів даних
- •1.3. Оператори мови JavaScript
- •1.3.1. Унарные оператори
- •1.3.2. Бинарные оператори
- •1.3.3. Оператори для роботи з окремими бітами
- •1.3.4. Оператори зсуву
- •1.3.5. Оператори відношення
- •1.3.6. Логічні оператори
- •1.3.7. Оператор присвоювання
- •1.3.8. Умовні оператори
- •1.3.9. Оператори циклу
- •1.3.10. Інші оператори
- •1.3.11. Старшинство операторів JavaScript
- •1.3.12. Функції в мові сценаріїв JavaScript
- •1.4. Приклади використання операторів циклу
- •2. Класи і об'єкти
- •2.1. Три типи об'єктів «JavaScript
- •2.1.1. Умонтовані об'єкти
- •2.1.2. Об'єкти браузера
- •2.1.3. Об'єкти на базі класів, утворюваних програмістом
- •2.2. Масиви в JavaScript
- •2.3.1. Властивості об'єкта window
- •2.3.2. Методи об'єкта window
- •2.4. Сценарії, що працюють з об'єктами window
- •2.4.1. Як закрити вікно браузера
- •2.4.2. Открываем нове окно
- •2.4.3. Текст , що біжить , у рядку стани браузера
- •2.4.4. Обмеження часу реакції користувача
- •2.4.5. Завантаження документа html у вікно браузера
- •2.5.1. Властивості об'єкта document
- •2.5.2. Методи об'єкта document
- •2.5.3. Колірне оформлення документа
- •2.5.4. Посилання і мітки в документі
- •2.6. Умонтований клас Math
- •2.6.1. Властивості
- •2.6.2. Методи
- •2.7. Умонтований клас Date
- •2.7.1. Конструктори класу Date
- •2.8. Умонтовані функції
- •2.9. Плавна зміна цвіту фона документа html
- •3. Робота з формами
- •3.1. Ієрархія об'єктів у формах
- •3.2. Форма і її властивості
- •3.2.2. Властивості об'єкта form
- •3.3. Об'єкти, що входять до складу форм
- •3.3.1. Кнопка button
- •3.3.2. Перемикач checkbox
- •3.3.3. Перемикач radio
- •3.3.4. Приклад форми з перемикачами
- •3.3.5. Список select
- •3.3.6. Приклади сценаріїв, що працюють із списками
- •3.3.7. Однострочное поле text
- •3.3.8. Перевірка анкети
- •3.3.9. Многострочное поле textarea
- •3.3.10. Приклад сценарію, що заповнює поле textarea
- •3.3.11. Однострочное поле password
- •3.3.12. Запровадження ідентифікатора і пароля
- •3.4. Перевірка заповнення форми
- •3.5. Шестнадцатеричный калькулятор
- •3.3.6. Електронні часи
- •4. Фреймы
- •4.1. Файл опису фреймов
- •4.2. Взаємодія між фреймами
- •4.2.1. Десятично-шестнадцатеричный перетворювач
- •4.2.2. Відображення декількох документів html
- •5. Растровые зображення
- •5.1. Растровое зображення як об'єкт
- •5.2. Динамічна заміна растровых зображень
- •5.2.1. Зміна зовнішнього вигляду графічних посилань
- •5.2.2. Створення анімаційних зображень
- •5.2.3. Чекання завантаження всіх зображень
- •6. Взаємодія з аплетами java
- •6.1. Вбудовування аплета Java у документ html
- •6.2. Виклик методів аплета Java із сценарію JavaScript
- •6.3. Доступ до полів аплета Java із сценарію JavaScript
- •6.4. Динамічне завантаження аплетов Java
- •7. Застосування cookie
- •7.1. Виконання основних операцій із cookie
- •7.1.1. Створення cookie
- •7.1.2. Одержання значення cookie
- •7.1.3. Зміна значення параметра cookie
- •7.1.4. Видалення cookie
- •7.1.5. Обмеження на використання cookie
- •7.2. Декілька прикладів використання cookie
- •7.2.1. Фіксація повторних провідин сторінки
- •7.2.2. Записна книжка Cookies Notepad
- •7.2.3. Настроювання параметрів документа html
- •7.2.5. Одержання cookie розширенням серверу Web
- •7.2.6. Лічильник провідин на базі cookie і програми cgi
- •7.3. Настроювання браузера для роботи з cookie
7.2.5. Одержання cookie розширенням серверу Web
У цьому поділі приведений приклад документа HTML, що створює cookie, а також вихідні тексти розширення серверу ISAPI, що відображає на динамічно утворюваній сторінці заголовки HTTP цього документа. Коли браузер створює cookie, розширення серверу одержує заголовок НТТР_СООКIЕ і відображає його.
Документ аналогічний описаному раніше в поділі "Записна книжка Cookies Notepad".
Додатково в документі розміщена кнопка Send. За допомогою цієї кнопки уміст вікна редагування і заголовок HTTP_COOKIES передаються розширенню ISAPI серверу Web.
Вихідний текст документа HTML ви знайдете в листинге 7.4.
Листинг 7.4. Файл chapter7/NotebookISAPI/NotebookISAPI. htm
<HTML>
<HEAD>
<TITLE>Cookies demo</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function addCookie(szName, szValue, dtDays Expires)
{
var dtExpires = new Date();
var dtExpiryDate = "";
dtExpires. setTime(dtExpires. getTime() + dtDaysExoires * 24 * 60 * 60 * 1000);
dtExpiryDare = dtExpires. toGMTString();
document. cookie = szName + "=" + escape (szValue) + ";
expires=" + dtExpiryDate;
}
function findCookie(szName)
{
var i=0;
var nStartPosition = 0;
var nEndPosition = 0;
var szCookieString = document.cookie;
var szTemp = "";
while (i <= szCookieString.length)
{
nStartPosition = i;
nEndPosition = nStartPosition + szName.length;
if(szCookieString.substring(nStartPosition, nEndPosition) == szName)
{
nStartPosition = nEndPosition + 1;
nEndPosition = document.cookie.indexOf(";",nStartPosition);
if(nEndPosition < nStartPosition)
nEndPosition = document.cookie.length;
szTemp = document.cookie.substring(nStartPosition, nEndPosition);
return unescape(szTemp);
break;
}
i++;
}
return "";
}
function removeCookie(szName)
{
var dtExpires = new Date();
dtExpires. setTime(dtExpires. getTime() - 1);
var szValue = findCookie(szName);
document. cookie = szName + "=" + szValue + "; expires=" + dtExpires.toGMTString();
}
function btnClick()
{
addCookie("My Text", Test Form.Cogent, value, 10);
}
//-->
</SCRIPT>
</HEAD>
<BODY BGCOLOR=white>
<Hl>Cookies Notepad</Hl>
<FORM NAME="TestForm" METHOD=POST ACTION="http://frolov/scripts/ishello.dll?">
<P><TEXTAREA NAME="Conmert"
ROWS="5" COLS="25" WRAP="physical">
</TEXTAREA>
<P><INPUT TYPE="button" VALUE="Store text"
onClick="btnClick();">
<INPUT TYPE="button" VALUE="Clear text"
onClick ="renoveCookie('MyText');TestForm.Conwent.value=' ' ">
<P><INPUT TYPE=submit VALUE="Send">
</FORM>
<SCRIPT LANGUACE="JavaScгipt">
<!--
var szMyText = "";
szMyText = findCookie("MyText");
if(szMyText != "")
{
TestForn.Comnert.value = szMyText;
}
//-->
</SCRIPT>
</BODY>
</HTML>
У ньому, у порівнянні з документом із поділу "Записна книжка Cook-ies Notepad", додана параметр ACTION в оператор <FORM>, а також кнопка типу submit із написом Send. За допомогою цієї кнопки дані з форми відправляються розширенню ISAPI:
...
<FORM NAME="TestForm" METHOD=POST
ACTION="http://frolov/scripts/ishello.dll?">
...
<INPUT TYPE=submit VALUE="Send">
Вихідний текст розширення ISAPI поданий у листинге 7.5. Він зроблений на базі приклада, узятого з 29-го тому "Бібліотеки системного програміста" (роздів "Додаток ISHELLO" гл. 8).
Листинг 7.5. Файл chapter7/NotebookISAPI/ishello. c
// Розширення ISAPI ishello.c
// Приклад розширення ISAPI, що відображає
// уміст cookie
//
// (С) Фролов А.В., 1997, 1998
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// або
// http://www.dials.ccas.ru/frolov
#include <windows.h>
#include <httpext.h>
// Функція GetExtensionVersion
// Запис версії інтерфейсу ISAPI і
// рядки опису розширення
BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer)
{
// Записуємо версію інтерфейсу ISAPI
pVer->dwExtensioriVersion =
MAKELONG(HSE_VERSION_MINOR, HSE_VERSION_MAJOR);
// Записуємо рядок опису розширення
lstrcpyn(pVer->lpszExtensionDesc,
"Cookie show ISAPI DLL", HSE_MAX_EXT_DLL_NAMS_LEN);
return TRUE;
}
// Функція HttpExtensionProc
DWORD WINAPI HttpExtensionProc (EXTENSION_CONTROL_BLOCK *lpECB)
{
CHAR szBuff[4096];
CHAR szTempBuf[4096];
DWORD dwSize;
// Нульовий код стана - ознака успішного виконання
lpECB->dwHttpStatusCode = 0;
// Записуємо в буфер заголовок HTTP і початковий
// фрагмент формованого динамічно документа HTML
wsprintf(szBuff, "Content-Type: text/html\r\n\r\n"
"<HTML><HEAD><TITLE>Simple ISAPI
Extension</TITLE></HEAD>\n"
"<BODY BGCOLOR=#FFFFFF><H2>Hello from ISAPI
Extension!</H2>\n");
// Добавляємо розділювальну лінію strcat(szBuff, "<HR>");
// Добавляємо версію інтерфейсу ISAPI
wsprintf(szTempBuf, "<P>Extension Version: %d. %d",
HIWORD(lpECB->dwVersion), LOWORD(lpECB->dwVersion));
strcat (szBuff, szTempBuf);
// Назва методу передачі даних
wsprintf(szTempBuf, "<BR>Method: %s", lpECB->lpszMethod);
strcat(szBuff, szTempBuf);
// Рядок параметрів запуску розширення ISAPI
wsprintf(szTempBuf, "<BR>QueryString: %s", lpECB->lpszQueryString);
strcat(szBuff, szTempBuf);
// Фізичний шлях до програмного файла розширення ISAPI
wsprintf(szTempBuf, "<BR>PathTranslated: %s",
lpECB->lpszPathTranslated);
strcat(szBuff, szTempBuf);
// Повний розмір даних, що потрібно получить
wsprintf (szTempBuf, "<BR>TotalBytes: %d",
lpECB->cbTotalBytes);
strcat(szBuff, szTempBuf);
// Тип даних
wsprintf (szTempBuf, "<BR>ContentType: %s",
lpECB->lpszContentType);
strcat(szBuff, szTempBuf);
// Відображаємо вміст COOKIE
strcat(szBuff, "<HR><P><B>Cookie:</B><BR>");
dwSize = 4096;
lpECB->GetServerVariable(lpECB->ConnID,
(LPSTR)"HTTP_COOKIE", (LPVOID)szTempBuf, &dwSize);
strcat(szBuff, szTempBuf);
// Кінцевий фрагмент документа HTML
strcat (szBuff, "</BODY></HTML>");
// Посилаємо вміст буфера віддаленому користувачу
if(!lpECB->ServerSupportFunction(lpECB->ConnID,
HSE_REQ_SEND_RESPONSE_HEADER, NULL, NULL,
(LPDWORD)szBuff))
{
// Якщо послати дані не вдалося,
// завершуємо роботу нашого розширення ISAPI
// с кодом помилки
return HSE_STATUS_ERROR;
}
// Записуємо код успішного завершення
lpECB->dwHttpStatusCode = 200;
// Повертаємо ознаку успішного завершення
return HSE_STATUS_SUCCESS;
}
Файл визначення модуля для бібліотеки DLL розширення приведений у листинге 7.6.
Листинг 7.6. Файл chapter7/NotebookISAPI/ishelIo. def
LIBRARY ishello
DESCRIPTION 'Simple ISAPI DLL'
EXPORTS
GetExtensionVersion
HttpExtensionProc
Для витягу значення cookie, переданого розширенню через заголовки HTTP, використана функція GetSeiverVariable із указівкою їй у якості другого параметра імені цікавлячої перемінної НТТР_СООКIЕ:
lpECB->GetServerVariable (lpECB->ConnID,
(LPSTR)"HTTP_COOKIE", (LPVOID)szTempBuf, SdwSize);
Отримане в такий спосіб значення дописується в буфер динамічно утворюваного документа HTML. Цей буфер згодом буде відправлений клієнту за допомогою функції ServerSupportFunction.
